查询结果中不包含NULL值

时间:2011-05-24 14:45:55

标签: mysql sql

考虑下表:

create table inttest (
    someint INT(10) NULL DEFAULT NULL
);

当我插入一些随机值时

insert into inttest 
  (someint) 
values 
  (1),(2),(3),(1),(2),(NULL);

并执行查询

select *
  from inttest 
 where someint != 1;

MySQL返回2,3,2但不返回NULL值。它是否正确?我应该使用OR someint IS NULL扩展我的查询,还是我的MySQL安装中的错误?

3 个答案:

答案 0 :(得分:3)

正确。没有任何内容等于NULL - 包括NULL。或者更正式地,评估NULL != 1的结果是UNKNOWN - 和WHERE子句谓词必须评估为TRUE

答案 1 :(得分:1)

SELECT 1 != NULL;
-- Output: NULL

比较运算符return TRUEFALSENULL

您期望NULL != 1能够TRUE给您NULL,但明智的是,您获得NULL进行比较。这是因为将NULLNULL进行比较是没有意义的: NULL 值!

这是一个狡猾的技巧,如果你真的想要它,你可以在结果集中得到SELECT * FROM `inttest` WHERE IF(`someint` = 1, FALSE, TRUE); 。该技巧依赖于反转逻辑,然后手动排除SELECT * FROM `inttest` WHERE `someint` != '1' OR `someint` IS NULL; 可能性:

{{1}}

更明显的方法可能是:

{{1}}

答案 2 :(得分:0)

您必须将NULL视为UNKNOWN。

在您的特定情况下,someint <> 1,您要求SQL引擎过滤掉任何不是1的内容。由于NULL是UNKNOWN,它可以为1但我们会永远不会知道因此,SQL引擎不会包含它,因为它不确定它不是1。