我在表中有一行users
带有 username test
。但是,出于某种原因,此查询返回一个空结果集。
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != null;
但是,如果我删除该`id` != null
段,查询将返回 result id = 1
。
但是1
!= NULL
。这是怎么回事?
该id
字段不可为空,并且是自动递增的。
谢谢!
您检查 NULL 的方法可能是问题所在。在 MySQL 中,尝试以下操作:
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` IS NOT NULL;
要检查 NULL 和空字符串,您可以使用:
SELECT `id`
FROM `users`
WHERE `username` = "test"
AND (`id` IS NOT NULL OR `id` != "");
查询不会返回一行,因为谓词“ id != NULL
”永远不会返回 TRUE。
原因是 SQL 中的布尔逻辑是三值的。布尔值可以有TRUE
,FALSE
或 NULL
。
NULL
只要被比较的一个(或两个)值是 ,就会返回不等式比较NULL
。
SQL 标准意味着与 NULL 进行比较是使用id IS NULL
or id IS NOT NULL
。MySQL 还添加了一个方便的 null 安全比较运算符,它将返回 TRUE 或 FALSE:
col <=> NULL
. 或者,在你的情况下 NOT (col <=> NULL)
尝试使用IS NOT NULL
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` IS NOT NULL
看看有什么区别
根据一般的数据库定义,Null 什么都不是,不能与任何其他值等同或比较。因此 ID=NUll 或 ID!=null 不起作用。
尝试:
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != '';
或者
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` iS NOT NULL;