2011-07-29 23 views
4

は、ここで彼らは動作しません、私のクエリをだが、私はこのような何かをしたい:WHERE句でCASE文をIS NULLで使用するにはどうすればよいですか?

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、私はWHERE句に a_second_field = a_value_from_another_queryを追加したいと思います。どうすればこれを達成できますか?

+0

:あなたは、クエリの作業を取得したい場合 、あなたは、このような何かを最初のcase式を使用する必要があり、その値を返します。 'CASE expr WHEN value THEN ...'表記法を使うこともできますし、 'CASE WHEN expr THEN ...'を使うこともできますが、単純な 'CASE WHEN NULL THEN'表記は、NULLが常に評価されるのでTHENを評価しませんUNKNOWNに、TRUEではない。 –

+0

'CASE WHENフィールドが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

は2つの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) 
関連する問題