Sql 对具有空值的列使用NOT IN运算符

Sql 对具有空值的列使用NOT IN运算符,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个表employee,它有一个列company,它有所有空值 现在,我想使用NOT IN操作符作为公司名称 select * from employee where employee.company NOT IN ('ABC', 'DEF') 从技术上讲,这不应该改变结果,因为company列已经有空值 但添加NOT IN将得到0行 这是因为employee.company列具有空值吗?请尝试以下方法: select * from employee E where (E.company

我有一个表employee,它有一个列company,它有所有空值

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

select * from employee where employee.company NOT IN ('ABC', 'DEF')
从技术上讲,这不应该改变结果,因为company列已经有空值

但添加NOT IN将得到0行

这是因为employee.company列具有空值吗?

请尝试以下方法:

select * 
from employee E
where (E.company NOT IN ('ABC', 'DEF')
       or E.company is null)
试着这样做:

select * 
from employee E
where (E.company NOT IN ('ABC', 'DEF')
       or E.company is null)
SQL使用:true、false和unknown。与null的比较结果为未知,这不是真的

所以where子句类似于:

where null in (1,2)
不会返回任何行。

SQL使用:true、false和unknown。与null的比较结果为未知,这不是真的

所以where子句类似于:

where null in (1,2)

不会返回任何行。

如果我正确,您将需要使用“不存在”而不是不在。FYI-Null不是像“ABC”,001等那样的值。如果我正确,您将需要使用“不存在”而不是不在。FYI-Null不是像“ABC”,001等那样的值。未知,这是不正确的-但根据定义,不正确是错误的:@姆贝基什,“未知”的定义是不正确的。从定义上看,这也不是假的。一旦你明白根据布尔定律不应该理解这一点,头痛就会消失,因为这里有3位,而不是2位。@Sebas-即使在,not-true中也是假的。“未知”不被定义为“不真实”。@Sebas-我知道,这就是为什么我在最初的评论中加上了笑脸。只是要指出,用简单的语言来解释这些细微之处是非常棘手的,尤其是当社区中包括英语不是第一语言的人时。@mbeckish:答案是unknown不是真的。答案并不是说unknown不是真的:unknown,它不是真的,但根据定义,not true是假的@姆贝基什,“未知”的定义是不正确的。从定义上看,这也不是假的。一旦你明白根据布尔定律不应该理解这一点,头痛就会消失,因为这里有3位,而不是2位。@Sebas-即使在,not-true中也是假的。“未知”不被定义为“不真实”。@Sebas-我知道,这就是为什么我在最初的评论中加上了笑脸。只是要指出,用简单的语言来解释这些细微之处是非常棘手的,尤其是当社区中包括英语不是第一语言的人时。@mbeckish:答案是unknown不是真的。答案并未说明unknown不正确: