[英]How to join to 2 different tables based on field value of main table?
所以我有3個名為menus
, products
和categories
。
menus表有id,item_type,可以是product | category和item_id。
我想要做的是當menu item_type = product
,將它與產品表ON products.id = menu.item_id
連接,並categories when item_type = category
加入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'
查詢有效,但我沒有看到每個菜單附加任何產品或類別數據。
我在這里錯過了什么嗎? 謝謝。
您需要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'
您只使用SELECT m.*
菜單中的值SELECT m.*
正確的查詢是使用*或具體需要的字段。
SELECT * 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'
您還需要將表的字段包括在JOIN
,因為您只選擇m
表的字段。
最后,你可能還需要使你的連接OUTER
仍然包含與你的任何2個連接都不匹配的記錄:例如:帶有另一個item_type
菜單(這不是你的實際用例,我現在可以看到,順便說一句)
SELECT m.*, p.*, c.* 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'
應足以返回所有menu
記錄,其中一些只包含產品信息(類別字段為NULL
值),反之亦然:
NULL
NULL
的值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.