2

我在表中有一行users带有 username test。但是,出于某种原因,此查询返回一个空结果集。

SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != null;

但是,如果我删除该`id` != null段,查询将返回 result id = 1

但是1!= NULL。这是怎么回事?

id字段不可为空,并且是自动递增的。

谢谢!

4

5 回答 5

3

您检查 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` != "");
于 2013-09-03T18:05:59.227 回答
2

查询不会返回一行,因为谓词“ id != NULL”永远不会返回 TRUE。

原因是 SQL 中的布尔逻辑是三值的。布尔值可以有TRUE,FALSENULL

NULL只要被比较的一个(或两个)值是 ,就会返回不等式比较NULL

SQL 标准意味着与 NULL 进行比较是使用id IS NULLor id IS NOT NULL。MySQL 还添加了一个方便的 null 安全比较运算符,它将返回 TRUE 或 FALSE:

col <=> NULL. 或者,在你的情况下 NOT (col <=> NULL)

于 2013-09-03T18:10:22.197 回答
1

尝试使用IS NOT NULL

SELECT `id` FROM `users` WHERE `username` = "test" AND `id` IS NOT NULL

看看有什么区别

SQL 小提琴演示

于 2013-09-03T18:06:05.100 回答
1

根据一般的数据库定义,Null 什么都不是,不能与任何其他值等同或比较。因此 ID=NUll 或 ID!=null 不起作用。

于 2013-09-03T18:09:53.690 回答
0

尝试:

SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != '';

或者

SELECT `id` FROM `users` WHERE `username` = "test" AND `id` iS NOT NULL;
于 2013-09-03T18:03:31.433 回答