2013-11-01 57 views
0

我有一個WHERE條款與多個條件由ANDSQL - 如何通過CASE語句執行比較?

加入我想要做以下檢查SQL查詢:

WHERE something AND WHERE x <> y 

但只有第二條當x不是一定值(以我的情況下,NULL)

換句話說,如果x不是NULL,那麼我想補充的x <> yWHERE條款 下面的代碼無法正常工作 - 我不知道,如果它是一個小的語法問題或者邏輯是否不受支持。如果不是,有沒有人對替代解決方案有任何想法?

WHERE something AND (CASE WHEN x IS NOT NULL THEN x <> y) 
+1

你正在使用哪些DBMS? – Kermit

回答

1

你已經推翻了這個。只需使用布爾邏輯:

WHERE something AND (x IS NULL OR x <> y) 

CASE表達並具有返回值。和大多數數據庫系統,評估謂詞的結果不表示爲SQL類型系統的值,所以它不能是由CASE返回的值。

+0

剛剛意識到我在2013年從未接受過這一點。再次感謝。那時我不知道我在想什麼。我想這很容易集中在一條路上,而不是看到簡單的解決方案。 –

0
WHERE something AND coalesce(x,'some non-y value') <> y 

這個工作最好的,如果你能找到,你知道永遠不會對任何行匹配y一個恆定值。如果你不能,你必須使用一個表達式來修改y,那會更慢。