为什么选择在varchar比较中消除NULL记录

时间:2014-10-04 15:25:01

标签: sql sql-server tsql

我有一张包含782,856条记录的表格。此表中有一列PEOPLE_TYPE是varchar(20)。我不认为表格模式很重要,但如果确实如此,我很乐意发表它。

它具有这些不同的值(parens是每种类型的计数):

NULL (782,101)
ANONYMOUS (1)
BOARD (530)
USER (224)

那么为什么选择返回这些结果???

select * from people where PEOPLE_TYPE != 'BOARD'

这返回225行... USER& ANONYMOUS ....为什么不包括我的空值...因为我现在已经执行了文本搜索并且无法真正比​​较NULL,所以它们被淘汰了?

感谢您对我的补救问题的耐心等待。

3 个答案:

答案 0 :(得分:7)

NULL是一件奇怪的事情。与NULL的任何比较都是false:

NULL = NULL为假

NULL!=任何东西都是假的

NULL!= NULL也是假的。

你必须说像column这样的东西是null,或者column不是null。

您的查询需要

select * from people where PEOPLE_TYPE != 'BOARD' or PEOPLE_TYPE is null

答案 1 :(得分:1)

您可以阅读此内容,了解有关未返回NULL记录的详细信息:http://msdn.microsoft.com/en-us/library/ms188048.aspx

如果要返回带有NULL的记录,则需要编写如下查询:

select * from people where ISNULL(PEOPLE_TYPE, '0') != 'BOARD'

或者这个:

select * from people where PEOPLE_TYPE != 'BOARD' OR PEOPLE_TYPE IS NULL

答案 2 :(得分:0)

另外还有一个名为COALESCE,http://msdn.microsoft.com/en-us/library/ms190349.aspx 我经常使用,

SELECT * FROM People WHERE COALESCE(PEOPLE_TYPE, '') != 'BOARD'