我在处理一些无法弄清楚的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
.