0

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

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

5 回答 5

3

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

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

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

SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END
于 2013-09-26T12:16:02.900 回答
2

我不知道您使用的是什么 RDBMS,因为其中一些配置了如何NULL处理。

NULL IN (9, 1, NULL)

可以写成

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

而不是他们TRUE也不是FALSE。他们都是NULL。由于CASE语句中只有两条路径,因此它属于ELSE阻塞。

于 2013-09-26T12:00:11.000 回答
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

于 2013-09-26T12:00:27.147 回答
0

因为您无法null使用比较运算符比较值。您只能使用is nulloris not null或使用 , 之类COALESCE()的功能ISNULL()。例如

  SELECT CASE WHEN COALESCE(NULL,-1) IN (9,1,-1) THEN 1 ELSE 0 END
于 2013-09-26T12:01:17.460 回答
0

Null 表示未定义。

NULL 对象不等于其他 NULL

NULL==1 返回假

NULL==2 返回假

NULL==NULL 也返回 false

于 2013-09-26T12:02:59.913 回答