Squirrel SQL左关联查询结果变内联 如何修正以返回全部左表记录
SQL查询修正方案
问题根因
- 左连接的右表过滤条件写在
WHERE子句中会导致左连接失效:左连接未匹配到的右表字段返回NULL,WHERE子句会直接剔除不满足过滤规则的NULL行,最终效果等同于内连接。 - 原查询还存在语法错误:
b.month = 'April'和c.month = 'April'之间缺少AND关键字。
修正后语句
SELECT a.id, a.amt, b.ac, c.city, a.month FROM table1 AS a LEFT JOIN table2 AS b ON a.id = b.id AND b.month = 'April' LEFT JOIN table3 AS c ON b.ac = c.ac AND c.month = 'April' AND c.city = 'london' WHERE a.month = 'April'
逻辑说明
- 主表
table1的4月过滤保留在WHERE子句,确保只取4月的左表全量记录 - 右表
table2、table3的过滤条件全部移动到对应ON关联条件中,仅过滤右表的匹配范围,不会排除左表记录,未匹配到的右表字段自动返回NULL - 执行后会返回预期的2条记录:A123匹配到london返回完整数据,A124关联
table3时不满足city=london的条件,city字段返回空值。
内容的提问来源于stack exchange,提问作者YZ123
相关产品推荐
相关产品推荐

