所以我有一个名为3个表menus,products和categories。
菜单表具有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)
该查询有效,尽管我没有看到每个菜单附带的任何产品或类别数据。
我在这里想念什么吗?谢谢。
您需要所需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)