我之前写了一篇关于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返回结果如下
重点来了,我之后对于not in 异常差异进行修改,改写sql改为not exists ,结果更出乎意料
#td和oracle执行结果一样,对于字段中有null的都会返回
所以请开发的小伙伴到时候对于null的一定要注意啊,如果有疑问的,可以拿我的sql和表去亲测一下;oracle版本我用的是11g