2014-04-16 43 views
0

我需要寫一個sql查詢如下: 從表中選擇名稱, (東西)作爲customer_id;sql查詢時的情況例

表有根據customer.So類型CUSTOMER_ID 3列我檢查中連續不空過ID列,我把它作爲其CUSTOMER_ID 所以在上面的查詢有東西阻擋如下:

(CASE 
     WHEN ID1 != null THEN ID1 
     WHEN ID2 != null THEN ID2 
     WHEN ID3 != null THEN ID3 
     ELSE null 
    END) as customer_id. 

但是,對於客戶ID,查詢總是返回null。我在這裏錯過了什麼或者更好的方法來實現這個目標?

回答

0

您需要使用not null而非!= NULL

(CASE 
    WHEN ID1 is not null THEN ID1 
    WHEN ID2 is not null THEN ID2 
    WHEN ID3 is not null THEN ID3 
    ELSE null 
END) as customer_id 

任何比較null(只有少數例外)返回NULL。並且NULL布爾值被視爲false。

更好地表達這是使用coalesce()

coalesce(ID1, ID2, ID3) as customer_id 
+0

謝謝:)。還有一個關於這個問題。我將以書面原生查詢(JPA)的形式使用這些查詢。所以可以使用coalesce()。我的意思是它支持所有的數據庫? – Alok

+0

@ user3417179:AFAIK,它受所有SQL支持。 –

+0

@ user3417179。 。 。 'coalesce()'是大多數數據庫支持的ANSI標準函數。有些不是,特別是舊版本,但大多數現代和普通數據庫確實支持該功能。而且,我認爲支持'case'的所有數據庫也都有'coalesce()'。 –