T-SQL:选择不等于值的行,包括空值



如何选择不等于值并在返回的数据中包含空值的行?我试过:

SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'

我想返回在分配的列中没有"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 不为 null,它将把 assignedByTeam 值与 'team01' 进行比较。 但是,如果 asignedByTeam 为 null,它将比较空白的 '' 和 '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

最新更新