[英]Why does this simple MySQL query not return the row?
我的用户表中有一行users
名为test
。 但是由于某种原因,此查询返回空结果集。
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != null;
但是,如果我删除`id` != null
段,查询将返回结果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
或id IS NOT NULL
。 MySQL还添加了一个方便的空安全比较运算符,该运算符将返回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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.