我从以下两个 SQL 查询中得到不一致的结果。
查询 1:select (case when 'Abc' = null then 1 else 0 end) from dual
查询 2:select (case when ('Abc' <> null) then 1 else 0 end) from dual
两个查询的结果相同,即
0
我错过了什么吗?
注意::我知道我可以使用 IS NULL and IS NOT NULL
但我的问题是为什么上述查询的结果不一致。
编辑:从@ppeterka 的回答中添加。
select (case when null = null then 1 else 0 end) from dual
返回 0
也。 Null 甚至不等于它自己。
但是这会返回什么?
select (case when null <> null then 1 else 0 end) from dual
0
再次
最佳答案
因为 NULL
是未知的,所以结果是 0
。当您想要比较列或值是否为 null 时,请使用 IS NULL
或 IS NOT NULL
。
select (case when 'Abc' IS null then 1 else 0 end) from dual -- 0
select (case when ('Abc' IS NOT null) then 1 else 0 end) from dual -- 1
关于mysql - SQL 案例给出不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15567391/