2010-09-24 97 views
0

我在WHERE部分子查詢,使用:NULL比較,取2

A.column <> B.column 

不幸的是,這是行不通的,如果任一A.column或B.column爲NULL。所以,我把它轉換爲:

((A.column <> B.column) OR ((A.column IS NULL) <> (B.column IS NULL))) 

,假設說: 「TABLE.COLUMN IS NULL」 是布爾值,我可以比較2個布爾值。但是...

「<」附近的語法不正確。

我不喜歡

((A.column <> B.column) OR ((A.column IS NULL) AND (B.column IS NOT NULL)) OR 
((A.column IS NOT NULL) AND (B.column IS NULL))) 

我怎麼能workarounf呢?

問候,

回答

3

NULLIF產量空當兩個值相等=)

WHERE NULLIF(A.column, B.column) IS NOT NULL 
+0

看起來不錯...我會試試這個。 – noober 2010-09-24 08:54:37

+0

不起作用。如果A.column爲null,則即使B.column不爲null,結果也將始終爲空。 – duraid 2012-09-19 18:08:07

1
(ISNULL(A.column,0)) <> (ISNULL(B.column,0)) 
+0

是不是要同時治療0和NULL?不會選擇'A = 0'和'B = NULL'的行。 – paxdiablo 2010-09-24 06:50:20

+0

我認爲這就是他的意圖。可能是錯誤的 – RPM1984 2010-09-24 06:56:43

+0

正如paxdiablo寫道,我必須有一個從未使用過的值。不幸的是,我沒有這樣的價值觀。更糟糕的是,要使用ISNULL,我必須知道列類型。我最好使用((NULL和NOT NULL)或(NOT NULL和NULL))來代替。 – noober 2010-09-24 08:44:18