2017-08-29 6 views
1

での句:CASE ... WHEREに私のクエリがどのように見えるのPostgreSQL

ここ
SELECT * 
FROM table 
WHERE t1.id_status_notatka_1 = ANY (selected_type) 
AND t1.id_status_notatka_2 = ANY (selected_place) 

私は はので、私のクエリがある場合を追加したいと思います:

SELECT * 
    FROM table 
    WHERE t1.id_status_notatka_1 = ANY (selected_type) 
     AND t1.id_status_notatka_2 = ANY (selected_place) 
     AND CASE 
      WHEN t2.id_bank = 12 THEN t1.id_status_notatka_4 = ANY (selected_effect) 
     END 

が、それはdoesnのは、仕事。構文は良いですが、何かを検索するのに失敗します。だから私の質問は、WHERE句でどのようにCASE WHENを使うかです。ショート例:それはない場合= 0は、その後WHERE(AND条件)に、いくつかの条件を追加する場合は、[追加(AND条件)はありません

答えて

4

CASE EXPRESSIONの必要はありません、単に括弧でORを使用します。

AND (t2.id_bank <> 12 OR t1.id_status_notatka_4 = ANY (selected_effect)) 
私は ANYCASEを使用しようとしたことがない、と私はそれをテストするためのpostgresを持っていないので、私はそれがコンパイルを願っていますが

AND t1.id_status_notatka_4 = ANY 
    CASE WHEN t2.id_bank = 12 
     THEN (selected_effect) 
     ELSE t1.id_status_notatka_4 
    END 

あなたは本当にしたいユースケースなら、これは正しい構文です。

+0

もう1つはコンパイルされません – Michu93

+2

最初のものを使用してください。とにかく、私は2番目のものが今でもうまくいくと思います。編集を参照してください。 – sagi

+0

最初に動作し、2番目はまだコンパイルされません。考え方は良いです、おそらく構文の問題 – Michu93

関連する問題