如何选择不等于值并且在返回的数据中还包含空值的行?我试过了:
SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
我想返回列assignedByTeam中没有'team01'的行,但我也想要包含空值的结果。不幸的是,上面的代码不起作用(不返回空值)。
我正在使用 MS SQL Server 2008 Express。
如何选择不等于值并且在返回的数据中还包含空值的行?我试过了:
SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
我想返回列assignedByTeam中没有'team01'的行,但我也想要包含空值的结果。不幸的是,上面的代码不起作用(不返回空值)。
我正在使用 MS SQL Server 2008 Express。
尝试显式检查 NULL:
SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
SELECT TOP 30 FROM Mails
WHERE ISNULL(AssignedByTeam,'') <> 'team01'
我看到了一个合并语句版本,但 ISNULL() 更有效。
当您有很多条件时,将所有内容键入两次就会很糟糕。这里有两个更好的选择:
SELECT TOP 30 FROM Mails
WHERE COALESCE(assignedByTeam,'') <> 'team01'
COALESCE 运算符返回列表中的第一个非空值。如果assignedByTeam 不为空,它会将assignedByTeam 值与“team01”进行比较。但如果assignedByTeam 为空,它会将空白'' 与'team01' 进行比较。它基本上是以下内容的简写:
SELECT TOP 30 FROM Mails
WHERE (CASE WHEN assignedByTeam IS NULL THEN '' ELSE assignedByTeam END) <> 'team01'
第二种方法是使您的条件有条件,例如:
SELECT TOP 30 FROM Mails
WHERE 1 = CASE WHEN assignedByTeam = 'team01' THEN 0 ELSE 1 END
在此示例中,ELSE 值将包括所有空行,因为它们不等于“team01”。
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
OR assignedByTeam is null
where column != 'value' or column is null