You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:26:16