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

Oracle左连接查询意外过滤空值行问题求助

问题原因分析

你遇到的问题核心在于WHERE子句对NULL值的处理:
左连接后,没有对应销售代表的客户行中,s.ename的值是NULL。而NULL参与任何LIKE比较运算时,结果都会是NULL,WHERE子句会自动排除所有结果为FALSE或NULL的行,所以这些无销售代表的客户就被过滤掉了。

两种修正方案

方案1:将过滤条件移至JOIN的ON子句

把销售代表的姓名过滤条件放到左连接的ON子句中,这样在执行连接操作时就会排除不符合条件的销售代表,同时保留所有客户(包括无对应销售代表的):

select c.custid "Customer  ID"
,c.name "Customer Name"
,s.ename "Sales Rep"
from customer c
left outer join emp s
on c.repid = s.empno
and (s.ename not like '%R'
     and s.ename not like '%R_')
order by c.name ;

方案2:在WHERE子句中允许NULL值

在WHERE条件里明确加上s.ename IS NULL的判断,让无销售代表的客户行也能通过过滤:

select c.custid "Customer  ID"
,c.name "Customer Name"
,s.ename "Sales Rep"
from customer c
left outer join emp s
on c.repid = s.empno
where 
(s.ename is null
 or (s.ename not like '%R'
     and s.ename not like '%R_'))
order by c.name ;
两种方案的差异
  • 方案1是连接阶段过滤:先筛选出符合条件的销售代表,再和客户表左连接,逻辑上更高效,因为减少了后续需要处理的连接行数。
  • 方案2是连接后过滤:先完成全量左连接,再筛选出符合条件的行,结果和方案1一致,但性能略逊于前者(数据量小时差异不明显)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:10:26