如何在一行中包含多行引用?

时间:2014-08-17 12:08:42

标签: mysql sql row

我有桌上披萨。它包括成本,身份证,名称(披萨)和成分等字段。 我也有表成分,成分名称和id。如何把表披萨成分放入例如1,2,4,15中,并且能够从表成分中获取成分名称?

Table Pizza:
id   name          cost    ingredients
1    Vegie Pizza   12,59   1,2

Table Ingredients
id   name
1    cheese
2    broccoli
3    pepperoni

我想获得egzample名称和成分:

Vegie Piza - cheese, broccoli - 12,59

或者可以用意大利辣香肠订购Vegie Pizza。

如何以我描述的方式连接这两个表?

2 个答案:

答案 0 :(得分:1)

你应该有一张桌子PizzaIngredients,每张披萨和每张配料一行。有人,一个人无法控制正在使用的数据结构。如果是这样,MySQL中有一个解决方案:

select p.name, p.cost, group_concat(i.name)
from pizza p join
     ingredients i
     on find_in_set(i.id, p.ingredients) > 0
group by p.name, p.cost;

但是,结点/关联表是将这些数据存储在关系数据库中的更好方法。

答案 1 :(得分:1)

首先以逗号分隔值的方式存储关系,而不是使用联结表来关联2个实体,请参阅Database Normalization

对于您当前的解决方案,您需要在加入条件

中使用find_in_set
select p.id,group_concat(i.name) ingredients,p.cost
from 
Pizza p
join Ingredients i on(find_in_set(i.id,p.ingredients) > 0)
group by p.id

Fiddle Demo