MySQL多列关联同一表查询:Meals表多食材列关联食材表
解决多食材关联查询的问题
嘿,我明白你的困扰了!你现在只拿到第一个食材的名称,是因为只和食材表做了一次关联对吧?要获取剩下四个食材的实际名称,你需要多次关联食材表,每次给它起不同的别名来区分,这样数据库就知道每个食材ID对应哪条食材记录了。
完整的SQL查询示例
假设你的食材表名叫Ingredients(如果实际表名不一样,记得替换成你自己的),可以用下面的查询语句:
SELECT m.mealName, i1.ingredient AS ingredientName1, i2.ingredient AS ingredientName2, i3.ingredient AS ingredientName3, i4.ingredient AS ingredientName4, i5.ingredient AS ingredientName5 FROM Meals m -- 关联第一个食材ID LEFT JOIN Ingredients i1 ON m.ingredient1 = i1.ingredientId -- 关联第二个食材ID,给表起别名i2 LEFT JOIN Ingredients i2 ON m.ingredient2 = i2.ingredientId -- 依次关联剩下的三个 LEFT JOIN Ingredients i3 ON m.ingredient3 = i3.ingredientId LEFT JOIN Ingredients i4 ON m.ingredient4 = i4.ingredientId LEFT JOIN Ingredients i5 ON m.ingredient5 = i5.ingredientId;
几个小细节说明
- 我用了
LEFT JOIN而不是INNER JOIN:这样就算某道菜的某个食材字段是空值(比如ingredient5没填),这道菜的记录依然会被保留,对应的食材名称会显示为NULL。如果你的业务要求必须所有食材都存在才显示,换成INNER JOIN就行。 - 如果想让空值显示得更友好,可以用
COALESCE函数,比如把i2.ingredient改成COALESCE(i2.ingredient, '未指定'),这样空值就会显示“未指定”而不是NULL。 - 别名(i1、i2这些)可以随便起,只要每次关联的别名不一样,能区分开就行。
内容的提问来源于stack exchange,提问作者Lauren Townsend
相关产品推荐
相关产品推荐

