我有一张包含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,所以它们被淘汰了?
感谢您对我的补救问题的耐心等待。
答案 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'