2011-07-29 6 views
4

여기가 작동하지 않는, 내 쿼리입니다하지만 난 이런 일을하고 싶지 :어떻게 IS NULL이있는 WHERE 절에서 CASE 문을 사용할 수 있습니까?

SELECT a_field FROM a_table 
WHERE 
... 
AND 
CASE 
WHEN a_value_from_another_query IS NULL THEN a_second_field IS NULL 
ELSE a_second_field = a_value_from_another_query 
END 

또는

SELECT a_field FROM a_table 
WHERE 
... 
AND 
CASE a_value_from_another_query 
WHEN NULL THEN a_second_field IS NULL 
ELSE a_second_field = a_value_from_another_query 
END 

또는, 내가 추가 할 a_value_from_another_query IS NULL

SELECT a_field FROM a_table 
WHERE 
... 
AND 
CASE NVL(a_value_from_another_query, 'x') 
WHEN 'x' THEN a_second_field IS NULL 
ELSE a_second_field = a_value_from_another_query 
END 

a_second_field IS NULL을 WHERE 절에 넣으면 a_value_from_another_query IS NOT NULL 일 때 a_second_field = a_value_from_another_query을 WHERE 절에 추가하고 싶습니다. 이것을 어떻게 할 수 있습니까?

+0

: 당신이 당신의 쿼리 작업을 얻고 싶은 경우에 , 당신은 같은 것을 첫 번째 경우 식을 사용해야하고 값을 반환합니다. 'CASE expr WHEN value THEN ...'표기법을 사용할 수도 있고,'CASE WHEN expr THEN ...'을 사용할 수도 있지만,'CASE WHEN NULL THEN' 표기법은 NULL이 항상 평가되기 때문에 THEN을 평가하지 않습니다 TRUE가 아니라 UNKNOWN으로. –

+0

'필드가 NULL 인 경우 ... ' –

+0

조건부 조인 기준을 달성하는 방법에 대한 답변을 원할 경우 더 많은 쿼리를 게시하십시오. –

답변

9

도구 상자에서 잘못된 도구를 가져온 것처럼 들립니다. 내가 끔찍하게 당신을 오해하지 않는 한

, 다음

WHERE 
    (a_value_from_another_query IS NULL AND a_second_field IS NULL) 
    OR 
    (a_value_from_another_query IS NOT NULL AND a_second_field = a_value_from_another_query) 

... 당신이 원하는 그렇게해야하는지.

+0

네 말이 맞아, 나는 틀린 길을 찾고 있었다. 고맙습니다! – codea

1

두 개의 case 문을 사용하는 방법이있다 : 당신의 선택에

1. CASE WHEN condition_1 THEN return_expr_1 
    [WHEN condition_2 THEN return_expr_2 ….] 
    [WHEN condition_n THEN return_expr_n ….] 
    [ELSE default] END 
2. CASE expression WHEN value1 THEN result1 
[WHEN value2 THEN result2 
..... 
ELSE resultn 
] 
END 

, 당신은 대신 다른 표현을 결과를 사용하고 있습니다. 이것은 효과가 없을 것입니다. 다음 다시 설명 - 당신은 당신의 생각을 명확히해야 할 것

SELECT a_field FROM a_table 
WHERE 
... 
AND nvl(a_second_field,'x')=(CASE WHEN a_value_from_another_query IS NULL THEN 'X' 
ELSE a_value_from_another_query END) 
관련 문제