所以我有一个表 1,名为 Meals,这是我的列名称。
膳食名称、成分 1、成分 2、成分 3、成分 4、成分 5
成分列是链接到第二个表的所有数字。它只是一张包含列名“compactId”和“compactment”的表。
我想显示第二个表中的膳食名称和实际成分,但我无法让它显示次要成分。
这仅适用于显示成分 1,但我需要全部 5 个。
SELECT mealName
, hearts
, i.ingredient
FROM Meals m
JOIN Ingredients i
ON i.ingredientId = m.ingredient1;
最佳答案
使用现有架构,您需要将 Meals
加入 Ingredients
5 次:
SELECT mealName,
hearts,
i1.*,
i2.*,
i3.*,
i4.*,
i5.*,
FROM Meals m
INNER JOIN Ingredients i1
ON m.ingredient1 = i1.ingredientId
INNER JOIN Ingredients i2
ON m.ingredient2 = i2.ingredientId
INNER JOIN Ingredients i3
ON m.ingredient3 = i3.ingredientId
INNER JOIN Ingredients i4
ON m.ingredient4 = i4.ingredientId
INNER JOIN Ingredients i5
ON m.ingredient5 = i5.ingredientId
但是如果一顿饭的成分超过 5 种会怎样呢?
更好的方法是有 3 个表:Meals
、Ingredients
和 MealIngredients
。
Meals
表为:
id, meal_name, hearts
MealIngredients
表为:
meal_id, ingredient_id
成分保持不变。
然后您只需将三个表连接在一起:
SELECT m.name,
i.ingredient
FROM Meals m
INNER JOIN MealIngredients mi
ON m.id = mi.meal_id
INNER JOIN Ingredients i
ON mi.ingredient_id = i
关于MYSQL 连接表,其中第二个表在表 1 的多个列中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48696648/