2017-08-29 53 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) 

這裏我想補充CASE WHEN 所以我的查詢是:

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 

,但它不」工作。語法很好,但無法搜索任何內容。所以我的問題是 - 如何在WHERE子句中使用CASE WHEN。簡單的例子:如果A = 0,則加一些條件,WHERE(AND條件),如果它不是那麼不添加(和條件)

回答

4

無需CASE EXPRESSION,只需使用OR用括號:

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

如果你真的想使用的情況下,這是正確的語法:

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

雖然我從來沒有嘗試過使用CASEANY,和我沒有Postgres的測試,所以我希望它編譯。

+0

第二個不編譯 – Michu93

+2

然後使用第一個。無論如何,我認爲第二個也會工作。請參閱編輯。 – sagi

+0

第一部作品,第二部仍然沒有編譯。這個想法很好,可能是語法問題 – Michu93