NULL IN (1,2,NULL) returns false

  • 本文关键字:NULL returns false IN sql
  • 更新时间 :
  • 英文 :


为什么这个SQL语句返回0

SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END

SQL 基于三值逻辑,其中有三个真值:TRUEFALSEUNKNOWN。特殊NULL值是"缺失数据"的占位符,如果将某些内容与缺失数据进行比较,则结果是未知的。

例如,<missing data>等于<missing data>吗?不可能知道,所以结果是UNKNOWN.

在这种特殊情况下,您正在尝试找出<missing data>是否在给定列表中:由于数据丢失,因此无法知道它是否在列表中,并且查询返回0

SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END
我不知道

你正在使用什么RDBMS,因为其中一些配置了如何处理NULL

NULL IN (9, 1, NULL)

可以写成

(NULL = 9) OR (NULL = 1) OR (NULL = NULL)

他们中没有TRUE也没有FALSE.他们都是NULL.由于 CASE 语句中只有两条路径,因此它属于ELSE块。

这取决于

在特定服务器中如何处理NULL

例如,在 SQL SERVER 中,您可以设置关闭ANSI_NULLS并让它返回 1:

SET ANSI_NULLS OFF
SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END

有关更多信息,您应该阅读SET ANSI_NULLS的备注部分

因为您无法使用比较运算符比较null值。您只能使用is nullis not null或使用COALESCE()ISNULL() 等函数。例如

  SELECT CASE WHEN COALESCE(NULL,-1) IN (9,1,-1) THEN 1 ELSE 0 END

Null 表示未定义。

对象不等于其他空

空 ==1 返回假

空==2 返回假

==空返回也为假

相关内容

  • 没有找到相关文章

最新更新