如何选择不等于某个值的行并在返回的数据中包含空值?我尝试过:
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'
我看到了一个使用COALESCE语句的版本,但ISNULL()更高效。
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
更好。 - Reversed Engineer<>
)有效吗?你必须找到除了team01之外的所有值。所以这已经无法通过索引进行搜索了。 - doctorgu当你有很多条件时,打两次所有内容会非常麻烦。以下是两种更好的选择:
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
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
OR assignedByTeam is null
where column != 'value' or column is null