oracle in 空值替换,Oracle SQL语句中NOT IN子查询中的NULL值陷阱

今天在使用Oracle数据库写存储过程时,发现了一个NOT IN子查询的null值陷阱。看了点资料,大概记录如下。

1、问题记录

本来是要查出A表中col列值在B表col列中没有出现过的记录。实际数据库是有符合条件的记录的,但是,运行如下SQL:

Select *

From A

where A.col not in (Select B.col from B)

始终查不出结果。经查,原来是查询子句:

Select B.col from B

查出的结果集中有空值导致的。也就是说,当not in后面跟的结果集中有null值时,not in子句返回false。下面是一个例子:

select 'Val1' Col1

from dual

where 2 not in (1, NULL);

运行之后,查不出结果,如下图:

not in null is false, actually.

这块儿具体的原因,可以从如下角度

你可能感兴趣的:(oracle,in,空值替换)