昨天写了个sql提数据,自以为不错,40万左右的数据相差了16条数据。
但是接天换了个环境,居然140多万的数据相差了30万左右的数据,着实感到不解,看了下sql
第一部分的条件是三个in的sql进行union ,结果是111万多点,
第二部分的条件是三个not in的and,结果是1000多,加起来也不过111万多点,看了好多遍想不出问题之所在。
后来还是另外一个人提醒了我,是不是null的记录在not in的时候不出来的。抱着试试看的心情,我加了这个条件(or t1.id is null)
结果验证了猜想,还真的是这个原因。以下是具体过程:
SQL> select rownum, t1.id from tmp_test_1 t1;
ROWNUM ID
---------- ---------------------------------------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8
9
10
11
12
13
13 rows selected
SQL> select rownum, t1.id from tmp_test_1 t1 where t1.id not in(1,2,3,4,5);
ROWNUM ID
---------- ---------------------------------------
1 6
2 7
SQL> select rownum, t1.id from tmp_test_1 t1 where t1.id not in(1,2,3,4,5) or t1.id is null;
ROWNUM ID
---------- ---------------------------------------
1 6
2 7
3
4
5
6
7
8
8 rows selected
SQL>