不等于<>查询排除空值

9

我遇到了一些SQL查询问题,无法解决。

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

如果我在我的表上运行上面的查询,我会得到60条记录。然而应该有接近300条记录。我认为问题是,一些记录在“请求”字段中只是空白的,而另一些则为空。但我原以为NULL仍然不能等同于“是”,不是吗?如果不是,有没有办法避免返回空值而不必返回并在所有空字段中填充“空白”?
4个回答

12

如果你想返回null值,那么比较时不会计算空值,你需要执行以下查询:

注:Nulls在比较时不计算。

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

谢谢。我可以以一种考虑到 NULL 的方式构建我的查询。 - Jason M

8

<=>
NULL-safe equal。此运算符执行类似于=运算符的相等比较,但如果两个操作数都为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"

1

我曾经也遇到过同样的问题,有人向我介绍了IS DISTINCT FROM语句。非常有用,但并不适用于所有的数据库管理系统!

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

0
这是由于表达式 null <> 'Yes' 的计算结果为 null,因此您应该添加一个单独的 is null 检查来包含符合此条件的记录到结果集中:
select * from MasterList where Requested <> "Yes" or Requested is null

顺便说一下:将null与任何东西进行比较,甚至是与null本身进行比较,总是会返回null


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接