2017-08-29 110 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