NULL IN(1,2,NULL)返回false

时间:2013-09-26 11:56:46

标签: sql

为什么这个SQL语句会返回0

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

5 个答案:

答案 0 :(得分:3)

SQL基于three-valued logic,其中有三个真值:TRUEFALSEUNKNOWN。特殊的NULL值是“缺失数据”的占位符,如果您比较某些内容,任何内容,缺少数据,结果都是未知的。

例如,<missing data>是否等于<missing data>?这是不可能的,所以结果是UNKNOWN

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

0

答案 1 :(得分:2)

我不知道你正在使用什么RDBMS,因为他们中的一些人已经对如何处理NULL进行了配置。

NULL IN (9, 1, NULL)

可以写成

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

而不是TRUEFALSE。它们都是NULL。由于CASE语句中只有两个路径,因此它位于ELSE块下。

答案 2 :(得分:0)

这取决于特定服务器中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

的备注部分

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

空均值未定义。

NUll对象不等于其他NULL

NULL == 1返回false

NUll == 2 return false

NULL == NULL也返回false