Sql 基于多个ID选择';他在同一列
我已经构建了两个SQL表(不是我自己): 一个表,其中包含分配了ID的所有成分:Sql 基于多个ID选择';他在同一列,sql,join,select,Sql,Join,Select,我已经构建了两个SQL表(不是我自己): 一个表,其中包含分配了ID的所有成分: IngredientID | IngredientName 1 | Milk 2 | Eggs 3 | Flower 第二个表包含成品,这些成品在ProductComponents列中引用了IngredenId,但没有产品名称,它们的构建方式如下: ProductID | ProductName | ProductIngredients 1
IngredientID | IngredientName
1 | Milk
2 | Eggs
3 | Flower
第二个表包含成品,这些成品在ProductComponents列中引用了IngredenId,但没有产品名称,它们的构建方式如下:
ProductID | ProductName | ProductIngredients
1 | Tomato Soup | NULL
2 | Pancakes | ;1;2;3
3 | Omlette | ;1;2
ProductID | ProductName | ProductIngredients
1 | Tomato Soup |
2 | Pancakes | Milk, Eggs, Flower
3 | Omlette | Milk, Eggs
如果它们没有任何引用,则其写为空,如果它们有,则以“;”符号开始,并且每个成分都被“;”符号分割
我的目标是联接这两个表,并生成一个select语句,该语句返回所用成分的实际名称,而不是另一列的ID,如下所示:
ProductID | ProductName | ProductIngredients
1 | Tomato Soup | NULL
2 | Pancakes | ;1;2;3
3 | Omlette | ;1;2
ProductID | ProductName | ProductIngredients
1 | Tomato Soup |
2 | Pancakes | Milk, Eggs, Flower
3 | Omlette | Milk, Eggs
有人能帮上忙吗?您需要产品成分的左连接,并按产品分组:
select p.ProductID, p.ProductName,
group_concat(i.IngredientName order by i.IngredientID) ProductIngredients
from Products p left join Ingredients i
on concat(p.ProductIngredients, ';') like concat('%;', i.IngredientID,';%')
group by p.ProductID, p.ProductName
函数group_concat()
在MySql中工作,但您可以找到与其他数据库类似的函数。请参阅。
结果:
如果您多次运行查询,它将改变演示中成分的顺序。编辑:太好了!这肯定比我想做的要好,现在每次都会返回正确的订单。@Dresden这是通过订单解决的。。。内部组_concat()。我编辑了。修复你的数据模型!不要将数字列表存储为字符串。这是在数据库中存储值的错误方法。