数据库 not in 的坑(后续)

我之前写了一篇关于select 查询时,当not in 里子查询中有null值时候,那么不返回,这个是可以理解的。但是对于多字段我没测试。有一天开发时,发现跑出的结果和我预想的有出入,我就进行了测试,测试截图以oracle为例,实际我还在td上也跑了,下边每一步我都附带了td结果

CREATE TABLE test111(a CHAR(5),b VARCHAR2(10) );
INSERT INTO test111 VALUES(NULL,'1');
INSERT INTO test111 VALUES('1','1');
INSERT INTO test111 VALUES('2','1');
CREATE TABLE test222(a CHAR(5),b VARCHAR2(10) );

INSERT INTO test222 VALUES(NULL,'1');
INSERT INTO test222 VALUES('1','1');



#首先什么也不加
#td执行结果与这个一样
SELECT * FROM test111 WHERE (a,b) NOT IN (SELECT a,b FROM test222 );–结果为空在这里插入图片描述
#然后加where条件过滤null值的,是自己想要的结果
#td执行结果与这个一样
在这里插入图片描述
然后用拼接两个字段
#td不返回
#oracle返回结果如下

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200425182147284.png
重点来了,我之后对于not in 异常差异进行修改,改写sql改为not exists ,结果更出乎意料
#td和oracle执行结果一样,对于字段中有null的都会返回
在这里插入图片描述
所以请开发的小伙伴到时候对于null的一定要注意啊,如果有疑问的,可以拿我的sql和表去亲测一下;oracle版本我用的是11g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值