当我使用语句
时select Name, Id
from employee
where Id in (1234,1234,NULL);
我得到了正确的结果。但是,当我写查询时
select Name, Id
from employee
where Id not in (1234,5678,NULL);
我只是得到了#34;空集"作为结果。请告诉我为什么会这样。我正在使用MYSQL。
答案 0 :(得分:1)
因为与null
进行比较会导致未知。您必须将IS
运算符与null
select Name, Id
from employee
where Id not in (1234,3456)
and Id is not null
答案 1 :(得分:0)
正如其他人所说,将NULL
评估的任何内容与UNKNOWN
进行比较(除了TRUE
和FALSE
之外的第三个逻辑状态。扩展两个表达式:
Id in (1234,1234,NULL)
=> Id = 1234 or Id = 1234 or Id = NULL
=> Id = 1234 or Id = 1234 or UNKNOWN
TRUE or <anything>
评估为TRUE
,因此如果Id = 1234
返回
TRUE
,整个展示期为TRUE
Id not in (1234,5678,NULL)
=&gt; Id != 1234 and Id != 5678 and Id != NULL
=&gt; Id != 1234 and Id != 5678 and UNKNOWN
<anything> and UNKNOWN
评估为UNKNOWN
,因此对于没有行,条件将评估为TRUE
,因此不会返回任何行