gpt4 book ai didi

sql - 奇怪的 SQL 行为,我想知道为什么会这样

转载 作者:行者123 更新时间:2023-12-05 01:06:09 28 4
gpt4 key购买 nike

考虑以下 Transact sql。

DECLARE @table TABLE(val VARCHAR(255) NULL)

INSERT INTO @table (val) VALUES('a')
INSERT INTO @table (val) VALUES('b')
INSERT INTO @table (val) VALUES('c')
INSERT INTO @table (val) VALUES('d')
INSERT INTO @table (val) VALUES(NULL)

select val
from @table
where val not in ('a')

我希望这会回来
b, c, d, NULL

但它返回
b, c, d

为什么会这样? NULL 不计算吗? NULL 以某种方式在集合“a”中?

最佳答案

答案

默认情况下,NULL 对 SQL 表示“未知”。因此,任何与“未知”的比较都是“未知”。

例如,如果一个陌生人站在 Bob 旁边,而您想问这样一个问题:“陌生人的名字和 Bob 的名字一样吗?”。答案是未知的。

由于您问的是“返回值不是'A'的任何记录”。当它到达那个 NULL 列时,SQL 仍然说,“我不知道”。由于表达式的计算结果不为真,因此不会返回该记录。

解决方案

任何将 NULL 与常量进行比较的表达式将始终为 NULL,因此使用特殊的 IS NULLIS NOT NULL测试 NULL 值。

这会让你b , c , d , 和 NULL :

SELECT val 
FROM @table
WHERE val NOT IN ('a') OR val IS NULL

解决方法

您可以更改 NULL 的默认行为:
SET ANSI_NULLS OFF

关于sql - 奇怪的 SQL 行为,我想知道为什么会这样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519147/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com