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