错误的结果在mysql中

时间:2015-10-28 15:51:34

标签: mysql sql

当我使用语句

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。

2 个答案:

答案 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进行比较(除了TRUEFALSE之外的第三个逻辑状态。扩展两个表达式:

  1. 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

  2. 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,因此不会返回任何行