mysql - SQL 案例给出不一致的结果

标签 mysql sql sql-server oracle

我从以下两个 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再次

SQLFiddle link

最佳答案

因为 NULL 是未知的,所以结果是 0。当您想要比较列或值是否为 null 时,请使用 IS NULLIS 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/

相关文章:

mysql - 多对多交叉表和一对一交叉表有什么区别

sql-server - SQLServer 两个外键指向同一列

mysql索引速度

php - Symfony2 + 存储过程 ||如何获取结果?

SQL 将 float 转换为 varchar

sql - 在存储过程中向临时表添加行号

sql-server - 如何使用 SELECT DISTINCT 指定特定的自定义顺序

sql - 如何拆分字符串以取出SQL中的特定部分?

mysql - 为什么在多次执行查询后收到一条成功消息,显示 `2 rows inserted`?

Python 数据库 api : fetchone vs fetchmany vs fetchall