我遇到了一些SQL查询问题,无法解决。
SELECT * FROM MasterList WHERE Requested <> "Yes";
如果我在我的表上运行上面的查询,我会得到60条记录。然而应该有接近300条记录。我认为问题是,一些记录在“请求”字段中只是空白的,而另一些则为空。但我原以为NULL仍然不能等同于“是”,不是吗?如果不是,有没有办法避免返回空值而不必返回并在所有空字段中填充“空白”?
如果你想返回null
值,那么比较时不会计算空值,你需要执行以下查询:
注:Nulls在比较时不计算。
SELECT * FROM MasterList WHERE Requested <> "Yes" OR Requested IS NULL;
<=>
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"
我曾经也遇到过同样的问题,有人向我介绍了IS DISTINCT FROM
语句。非常有用,但并不适用于所有的数据库管理系统!
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
。