2013-01-14 20 views
0

這可能是在其他數據庫的情況很好,但如果你讓下面的查詢爲什麼覈對現有數據不包括在SQL Server NULL 2008

SELECT * FROM MyTbl WHERE MyColumn != 'Foo' 

又在哪裏MyColumn是,比如說任何記錄,「 Bar'被提取,但不是MyColumn爲NULL的地方。我認爲這是預期的行爲,這背後有一個原因,我想知道爲什麼。

IS NULL被認爲是等於「富」,或者它只是沒有預計的條件的一部分,因爲條件(NULL!=「富」)似乎是真實的。

+7

'NULL'裝置_undefined_。與某些非特定的比較必須返回_unequal_。 –

+0

http://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic/ – Bort

+0

非常相似的問題:http://stackoverflow.com /問題/ 1843451 /爲什麼 - 不空無效評估到假的-SQL服務器?RQ = 1 – msmucker0527

回答

5

在DB的邏輯,NULL意味着根本就在這個字段中沒有定義的數據。它被認爲與任何東西都不相等或不同。你必須明確地在其上進行過濾,如果你想獲取相關線路:

SELECT * FROM MyTbl WHERE MyColumn != 'Foo' OR MyColumn IS NULL 

Wikipedia

+0

這就是我正在尋找的答案,謝謝! – Maffelu

1

在SQL Server的工作原理三態,這意味着NULL = NULL UNKNOWN which treats as FALSE

0

在所有的關係型數據庫,空值不等於任何東西,包括自己。

您將無法找到與MyColumn空值,即使你的查詢是"select * from MyTbl where MyColumn = null"行。只有這樣,才能讓他們將"select * from MyTble where MyColumn is null"

有關詳細說明,請參閱http://en.wikipedia.org/wiki/Null_(SQL

相關問題