You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在筛选时显示所有SQL行?含左连接查询示例

问题分析与解决

你的问题核心是WHERE子句中的b.c = '100'过滤掉了LEFT JOIN未匹配到表B的行——因为这些行的b.c值为NULL,NULL与任何值的比较结果都不成立,导致原本该保留的表A行被剔除,相当于把LEFT JOIN变成了INNER JOIN。

要保留表A的所有行,同时仅匹配表B中c='100'的记录,需要将b.c = '100'的条件移至LEFT JOIN的ON子句中,而非WHERE子句。

正确SQL语句

SELECT a.a, a.b, b.c
FROM tableA a 
LEFT JOIN tableB b 
  ON a.b = b.a AND b.c = '100'
WHERE a.a = '1'

执行结果

a   b   c
-------------------
1   1   100
1   2   100
1   3   
1   4   
1   5   100

逻辑说明

LEFT JOIN的规则是保留左表(tableA)的全部行,右表(tableB)匹配到符合条件的记录则显示对应值,未匹配则显示NULL。将右表的过滤条件放在ON子句中,是在匹配阶段就只筛选表B中符合c='100'的记录;若放在WHERE子句中,则是在匹配完成后,直接剔除所有b.c不为100的行(包括NULL行)。

内容的提问来源于stack exchange,提问作者user3596617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:52:07