实际上以下任何一项都不会返回值。为什么呢?
DECLARE @val AS INTEGER
SET @val= NULL
SELECT 'A' WHERE @val IN (1, 2, 3, NULL)
SELECT 'B' WHERE @val NOT IN (1, 2, 3, NULL)
SELECT 'C' WHERE @val IN (1, 2, 3)
SELECT 'D' WHERE @val NOT IN (1, 2, 3)
感谢。
答案 0 :(得分:3)
想象一下,在房间里有5个女人。你知道他们中的3个:Lisa,Sandra和另一个Lisa,其中2个是陌生人,所以你不知道他们的名字。
如果有人问你这些陌生人是否有相同的名字,你就无法回答,因为你不知道,所以在这种情况下你没有返回任何行:
DECLARE @val AS NVARCHAR(20)
SET @val = NULL
DECLARE @Women AS TABLE
(
Id INT,
Name NVARCHAR(20)
)
INSERT INTO @Women VALUES (1,'Lisa'), (2,'Sandra'), (3,'Lisa'), (4,NULL), (5,NULL)
SELECT *
FROM @Women
WHERE @val IN (Name)
如果有人问你陌生人名字是否相等,你也不能回答,所以没有回来的行。
SELECT *
FROM @Women
WHERE @val NOT IN (Name)
所以当你有NULL(未知)时,你无法比较它。
答案 1 :(得分:2)
与NULL的比较总是返回false,除非您使用Is Null或Is Not Null。你应该把它改成这样的东西:
SELECT 'A' WHERE @val IN (1, 2, 3) OR @val Is Null
答案 2 :(得分:1)
NULL的比较总是返回未定义的值。即使这个SQL也不会返回任何选择1,其中null = null 它表明NULL是未定义的。