LEFT OUTER JOIN查询无关联冰淇淋的制造商问题咨询
SQL查询问题解答
1. LEFT OUTER JOIN的关联逻辑
表1 LEFT OUTER JOIN 表2的核心逻辑是保留左表(表1)的所有记录,右表(表2)中匹配到关联条件的记录会正常拼接,匹配不到的部分所有字段自动填充为NULL。
2. 你当前的关联顺序错误
你的需求是覆盖所有未生产冰淇淋的制造商,也就是要完整保留manufacturer表的所有记录,所以左表应该是manufacturer,而不是ice_cream。你原来的写法是ice_cream左连manufacturer,只能保留所有有冰淇淋对应的制造商,永远查不到没生产过冰淇淋的Gelatron(manufacturer_id=3)。
3. ON子句条件问题
你在ON子句里加的OR manufacturer.manufacturer_name IS NULL是完全多余的,既不需要放在ON里也不需要放在WHERE里:
- 左连接的NULL是匹配失败时自动生成的,不需要额外加条件触发
- 如果把这个条件放到WHERE里,反而会过滤掉你想要保留的、没有生产冰淇淋的制造商记录。
正确的查询代码
SELECT m.manufacturer_id, m.manufacturer_name, ic.ice_cream_id, ic.ice_cream_name FROM manufacturer m LEFT OUTER JOIN ice_cream ic ON m.manufacturer_id = ic.manufacturer_id ORDER BY m.manufacturer_id, ic.ice_cream_id ASC;
该查询返回的结果会包含manufacturer_id=3的Gelatron记录,对应的ice_cream_id和ice_cream_name都是NULL,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Elmond John
相关产品推荐
相关产品推荐

