如何基于主表的字段值联接到2个不同的表?

wob*_*ano 2 mysql sql join

所以我有一个名为3个表menusproductscategories

菜单表具有ID,可以为product | category的item_type和item_id。

我想做的是何时menu item_type = product将其与产品表一起加入并与一起ON products.id = menu.item_id加入categories when item_type = category

这是我当前的查询:

SELECT m.* FROM menus m 
LEFT JOIN products p ON p.id = m.item_id AND m.item_type = 'product' 
LEFT JOIN categories c ON c.id = m.item_id AND m.item_type = 'category'
Run Code Online (Sandbox Code Playgroud)

该查询有效,尽管我没有看到每个菜单附带的任何产品或类别数据。

我在这里想念什么吗?谢谢。

Gor*_*off 5

您需要所需SELECT的列。您仅从menus表中选择列,仅此而已。

我建议从其他两个表中选择列,但可以使用组合它们COALESCE()

SELECT m.*,
       COALESCE(p.name, c.name) as name,  -- or whatever the columns are
       -- repeat for additional columns that you want
FROM menus m LEFT JOIN
     products p
     ON p.id = m.item_id AND m.item_type = 'product' LEFT JOIN
     categories c
     ON c.id = m.item_id AND m.item_type = 'category'
Run Code Online (Sandbox Code Playgroud)

  • 当其他答案奏效时...这就是我需要的。我只想将产品或类别名称显示为一个字段,并使用COALESCE(p.name,c.name)作为名称来显示它。谢谢! (2认同)