注意事项: Oracle Not Exists 及 Not In 使用

今天遇到一个问题,not in 查询失效,我以为是穿越了,仔细查了点资料,原来理解有误!


select value from temp_a a
where a.id between 1 and 100
and not exists(select * from temp_b b where a.value=b.value);

这时能查出结果

select value from temp_a a
where a.id between 1 and 100
and a.value not in(select value from temp_b);

此时查出的结果为空.

经过google终于找出原因: 内表(temp_b)有空值. 用not in得到的结果集都为空.以下是结论:

1、对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。

2、对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值