mysql 不等于〈>查询排除NULL值

i2byvkas  于 2023-02-11  发布在  Mysql
关注(0)|答案(4)|浏览(215)

我遇到了一些SQL查询的问题,我不能弄清楚。

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

如果我在我的表上运行上面的查询,我会返回60条记录。但是应该有接近300条记录。我认为问题是,一些记录在请求字段中为空,而其他记录为NULL。但是我认为NULL仍然不等于“是”,不是吗?如果不是,有没有一种方法可以绕过它,而不必返回并“清空”所有空字段?

voase2hg

voase2hg1#

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

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

ocebsuys2#

<=>
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"
5f0d552i

5f0d552i3#

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

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

注:将null与任何东西进行比较,甚至与null本身进行比较,总是返回null

cpjpxq1n

cpjpxq1n4#

我也遇到过同样的问题,有人向我介绍了IS DISTINCT FROM结构,非常有用,但不是所有的DBMS都可以使用!

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

相关问题