繁体   English   中英

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

[英]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中的布尔逻辑是三值的。 布尔值的值可以为TRUEFALSENULL

每当被比较的值中的一个(或两个)为NULL时,不等式比较将返回NULL

SQL标准表示要与NULL比较的方法是使用id IS NULLid 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

看看差异

SQL Fiddle DEMO

通常,通过数据库定义,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM