2014-04-16 3 views
0

다음과 같이 SQL 쿼리를 작성해야합니다. 이름을 NAME으로 선택 이름이 (something)이고 테이블에서 customer_id로;SQL 쿼리 케이스 예

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

표는 내가 CUSTOMER_ID 그래서 위의 질의에 뭔가 블록이기 때문에 다음과 같이 null가 아닌 그 어느 id 컬럼은, 내가 그것을 가지고있는 직렬 확인 customer.So의 종류에 따라 CUSTOMER_ID 3 열이

그러나 쿼리는 항상 고객 ID에 대해 null을 반환합니다. 여기에 뭔가가 있거나 더 좋은 방법이 없으십니까?

답변

0

당신은 != NULL보다는 not 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()'를 가지고 있다고 생각합니다. –