不等于<>查询排除 NULL 值



我在处理一些无法弄清楚的SQL查询时遇到了问题。

SELECT * FROM MasterList WHERE Requested <> "Yes";

如果我在我的表上运行上述查询,我会返回 60 条记录。但是应该有接近300个。 我认为问题是,某些记录在"请求"字段中只是空白的,而其他记录是空的。 但我会认为 NULL 仍然不等于"是"不是吗?如果没有,有没有办法解决这个问题,而不必返回并"空白"所有空字段?

比较不计算空值,如果您希望返回null值,则需要执行以下查询:

SELECT * FROM MasterList WHERE Requested <> "Yes" OR Requested IS NULL;

<=>
空安全等于。此运算符执行与 = 运算符类似的相等比较,但如果两个操作数均为 NULL,则返回 1 而不是 NULL,如果一个操作数为 NULL,则返回 0 而不是 NULL。

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;  
    -> 1, 1, 0   
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;   
    -> 1, NULL, NULL  

在您的情况下使用:

SELECT * FROM MasterList WHERE not Requested <=> "Yes"

我一直在为同样的问题而苦苦挣扎,有人向我介绍了IS DISTINCT FROM结构。非常有用,但并非适用于所有DBMS!

SELECT * FROM MasterList WHERE Requested IS DISTINCT FROM "Yes";

发生这种情况是因为null <> 'Yes'表达式的计算结果为 null ,因此您应该添加一个单独的is null检查以在结果集中包含满足此条件的记录:

select * from MasterList where Requested <> "Yes" or Requested is null

附言:将null与任何东西进行比较,即使是与null本身进行比较,也总是返回null.

相关内容

  • 没有找到相关文章

最新更新