我在表格users
中有一行,用户名为test
。但是,出于某种原因,此查询返回一个空结果集。
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != null;
但是,如果我删除`id` != null
段,则查询会返回结果id = 1
。
但是1
!= NULL
。这是怎么回事?
id
字段不可为空并且是自动增量。
谢谢!
答案 0 :(得分: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` != "");
答案 1 :(得分:2)
查询不会返回一行,因为谓词“id != NULL
”永远不会返回TRUE。
这是因为SQL中的布尔逻辑是三值的。布尔值的值可以是TRUE
,FALSE
或NULL
。
如果要比较的值中的一个(或两个)为NULL
,则不等式比较将返回NULL
。
SQL标准意味着与NULL比较是使用id IS NULL
或id IS NOT NULL
。 MySQL还添加了一个方便的空值安全比较运算符,它将返回TRUE或FALSE:
col <=> NULL
。或者,在您的情况下NOT (col <=> NULL)
答案 2 :(得分:1)
尝试使用 IS NOT NULL
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` IS NOT NULL
看一下差异
答案 3 :(得分:1)
一般来说,通过数据库定义,Null是空的,不能与任何其他值等同或比较。因此ID = NUll或ID!= null将不起作用。
答案 4 :(得分:0)
尝试:
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != '';
OR
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` iS NOT NULL;