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

Tsql T-SQL:选择不等于值的行,包括空值,tsql,Tsql,如何选择不等于某个值且在返回的数据中包含空值的行? 我试过: SET ANSI_NULLS OFF SELECT TOP 30 FROM Mails WHERE assignedByTeam <> 'team01' 将ANSI_空值设置为OFF 从邮件中选择前30名 团队'team01'指定的位置 我希望返回列assignedByTeam中没有'team01'的行,但我还希望结果包含null。不幸的是,上面的代码不起作用(不返回空值) 我正在使用MS SQL Server 200

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

SET ANSI_NULLS OFF
SELECT TOP 30 FROM Mails
WHERE assignedByTeam <> 'team01'
将ANSI_空值设置为OFF
从邮件中选择前30名
团队'team01'指定的位置
我希望返回列assignedByTeam中没有'team01'的行,但我还希望结果包含null。不幸的是,上面的代码不起作用(不返回空值)


我正在使用MS SQL Server 2008 Express。

尝试显式检查空值:

 where column != 'value' or column is null
SELECT TOP 30 col1, col2, ..., coln
FROM Mails
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL)
选择前30个col1、col2、…、coln
从邮件
其中(assignedByTeam“team01”或assignedByTeam为空)
从邮件中选择前30名
团队'team01'指定的位置
或assignedByTeam为空

当你有很多条件时,每件事都要输入两次就很糟糕。以下是两个更好的选择:

SELECT TOP 30 FROM Mails
WHERE COALESCE(assignedByTeam,'') <> 'team01'
在本例中,ELSE值将包括所有空行,因为它们不等于“team01”。

从邮件中选择前30名
SELECT TOP 30 FROM Mails
WHERE ISNULL(AssignedByTeam,'') <> 'team01'
其中ISNULL(由团队分配“”)“team01”

我看到了一个coalesce语句版本,但ISNULL()更有效。

是的,但我认为有一种更短的方法可以做到这一点,比如只编写一个命令,而不是编写几个命令。无论如何,谢谢你的努力@ValCool:在SQL标准中,有一个名为
的操作符,它与
不同,但SQL Server不支持它。MySQL有非标准的空安全相等运算符
而不是b
,但SQL Server也不能这样做。@MarioDeSchaepmeester:是的。在我看来,这是最优雅的解决方案。执行计划是什么样的?它还会使用索引吗?不会使用索引。对于性能,
其中(assignedByTeam'team01'或assignedByTeam为NULL)
要好得多
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 ISNULL(AssignedByTeam,'') <> 'team01'