簡體   English   中英

如何根據主表的字段值加入2個不同的表?

[英]How to join to 2 different tables based on field value of main table?

所以我有3個名為menusproductscategories

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值),反之亦然:

  • 當item_type = category時,p。*值為NULL
  • c。* item_type = menu時帶有NULL的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM