我有一个表employee
,其中有一个列公司,其中包含所有空值
现在,我想使用NOT IN
运算符作为公司名称
select * from employee where employee.company NOT IN ('ABC', 'DEF')
从技术上讲,这不应该改变结果,因为公司列已经有了空值。
但添加NOT IN
会产生0行。
这是因为employee.company
列的值为NULL
吗?
答案 0 :(得分:5)
尝试这种方式:
select *
from employee E
where (E.company NOT IN ('ABC', 'DEF')
or E.company is null)
答案 1 :(得分:2)
SQL使用three valued logic:true
,false
和unknown
。与null
的比较会产生unknown
,而不是true
。
所以where
条款如下:
where null in (1,2)
不会返回任何行。