为什么这个简单的MySQL查询不返回行?

时间:2013-09-03 18:01:52

标签: mysql sql select null

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

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

但是,如果我删除`id` != null段,则查询会返回结果id = 1

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

id字段不可为空并且是自动增量。

谢谢!

5 个答案:

答案 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中的布尔逻辑是三值的。布尔值的值可以是TRUEFALSENULL

如果要比较的值中的一个(或两个)为NULL,则不等式比较将返回NULL

SQL标准意味着与NULL比较是使用id IS NULLid 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

看一下差异

SQL Fiddle DEMO

答案 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;