5
我試圖使用LEFT JOINS找到不同的孤立的menu_item記錄,然後檢查NULL值。在MySQL中使用LEFT JOIN查找孤立記錄
以下查詢返回的結果實際上並不是孤兒。 mitem_id是menu_item表的主鍵和price_info表的外鍵。 pinfo_id是price_info表的主鍵和一個外鍵orderdetails表。
SELECT DISTINCT mi.mitem_id, descr
FROM menu_item mi
LEFT JOIN price_info pi ON pi.menu_item = mi.mitem_id
LEFT JOIN orderdetails od ON od.price_info = pi.pinfo_id
WHERE od.detail_id IS NULL;
一個返回的記錄看起來像這樣:
+----------+------------------+
| mitem_id | descr |
+----------+------------------+
| 926 | Alameda Pale Ale |
+----------+------------------+
我怎麼知道這不是一個孤立的,因爲當我運行查詢:
SELECT od.detail_id
FROM orderdetails od
INNER JOIN price_info pi ON pi.pinfo_id = od.price_info
INNER JOIN menu_item mi ON mi.mitem_id = pi.menu_item
WHERE mi.mitem_id = 926;
它返回一組記錄:
+-----------+
| detail_id |
+-----------+
| 142830 |
| 142876 |
| 143394 |
| 143610 |
爲什麼它返回的結果不是孤兒?
LEFT JOIN返回「左」表中的所有條目,這些條目可能會或可能不一定在「右」表中。它仍然會返回「右」表中的記錄,因爲它們也位於「左」表中。 –
如果您正在使用OUTER JOIN,則連接的順序與結果相關。你的查詢是非常不同的。您應該爲其他表格添加最少的樣本數據。 – VMai
連接是否可能導致至少一行來自orderdetails,其中detail_id爲NULL?也就是說,可能有多個來自orderdetails的匹配menu_item和price_info的行,並且至少有一個不是NULL – kane