我遇到了一些SQL查询的问题,我不能弄清楚。
SELECT * FROM MasterList WHERE Requested <> "Yes";
如果我在我的表上运行上面的查询,我会返回60条记录。但是应该有接近300条记录。我认为问题是,一些记录在请求字段中为空,而其他记录为NULL。但是我认为NULL仍然不等于“是”,不是吗?如果不是,有没有一种方法可以绕过它,而不必返回并“清空”所有空字段?
voase2hg1#
空值在比较中不计算在内,如果希望返回null值,则需要执行以下查询:
null
SELECT * FROM MasterList WHERE Requested <> "Yes" OR Requested IS NULL;
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"
5f0d552i3#
发生这种情况的原因是null <> 'Yes'表达式的计算结果为null,因此您应该添加一个单独的is null检查,以便在结果集中包含满足此条件的记录:
null <> 'Yes'
is null
select * from MasterList where Requested <> "Yes" or Requested is null
注:将null与任何东西进行比较,甚至与null本身进行比较,总是返回null。
cpjpxq1n4#
我也遇到过同样的问题,有人向我介绍了IS DISTINCT FROM结构,非常有用,但不是所有的DBMS都可以使用!
IS DISTINCT FROM
SELECT * FROM MasterList WHERE Requested IS DISTINCT FROM "Yes";
4条答案
按热度按时间voase2hg1#
空值在比较中不计算在内,如果希望返回
null
值,则需要执行以下查询:ocebsuys2#
<=>
NULL安全相等。此运算符执行相等比较,类似于=运算符,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
在您情况下,请用途:
5f0d552i3#
发生这种情况的原因是
null <> 'Yes'
表达式的计算结果为null
,因此您应该添加一个单独的is null
检查,以便在结果集中包含满足此条件的记录:注:将
null
与任何东西进行比较,甚至与null
本身进行比较,总是返回null
。cpjpxq1n4#
我也遇到过同样的问题,有人向我介绍了
IS DISTINCT FROM
结构,非常有用,但不是所有的DBMS都可以使用!