在具有NULL值的列上使用NOT IN运算符

时间:2013-06-18 13:57:17

标签: sql oracle plsql

我有一个表employee,其中有一个列公司,其中包含所有空值

现在,我想使用NOT IN运算符作为公司名称

select * from employee where employee.company NOT IN ('ABC', 'DEF')

从技术上讲,这不应该改变结果,因为公司列已经有了空值。

但添加NOT IN会产生0行。

这是因为employee.company列的值为NULL吗?

2 个答案:

答案 0 :(得分:5)

尝试这种方式:

select * 
from employee E
where (E.company NOT IN ('ABC', 'DEF')
       or E.company is null)

答案 1 :(得分:2)

SQL使用three valued logictruefalseunknown。与null的比较会产生unknown,而不是true

所以where条款如下:

where null in (1,2)

不会返回任何行。