2017-08-29 22 views
1

Meine Anfrage wie folgt aussieht:CASE ... WHEN in WHERE-Klausel in Postgresql

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

hier würde ich CASE hinzufügen wie wenn so meine Frage ist:

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 

aber es doesn‘ t arbeiten. Die Syntax ist gut, aber sie kann nichts finden. Also meine Frage ist - wie CASE WHEN in WHERE-Klausel verwenden. Kurzes Beispiel: wenn a = 0, dann ist eine Bedingung in der WHERE (UND-Bedingung), wenn es nicht fügen Sie dann nicht (UND-Bedingung)

Antwort

4

Keine Notwendigkeit für CASE EXPRESSION, verwenden Sie einfach OR mit Klammern:

AND (t2.id_bank <> 12 OR t1.id_status_notatka_4 = ANY (selected_effect)) 

Wenn Sie wirklich wollen, Anwendungsfall, das ist die richtige Syntax:

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

Obwohl ich nie CASE mit ANY zu verwenden versucht, und ich habe nicht postgres es zu testen, so dass ich hoffe, dass es kompiliert wird.

+0

Die zweite kompiliert nicht – Michu93

+2

Dann verwenden Sie die erste. Jedenfalls denke ich, dass der zweite auch jetzt funktionieren wird. siehe Bearbeiten. – sagi

+0

Erste funktioniert, die zweite kompiliert noch nicht. Die Idee ist gut, wahrscheinlich Syntax-Problem – Michu93