CASE...WHEN 在 Postgresql 的 WHERE 子句中

新手上路,请多包涵

我的查询看起来像:

 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 条件),如果不是则不添加(AND 条件)

原文由 Michu93 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

不需要 CASE EXPRESSION ,只需使用 OR 带括号:

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

原文由 sagi 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于那些希望在 WHERE 子句中使用 CASE 的人,在上面添加 else true 条件块中的 case 应该允许查询按预期工作。在 OP 中,案例将解析为 NULL,这将导致 WHERE 子句有效地选择 WHERE … AND NULL,这将始终失败。

 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)
        ELSE true
     END

原文由 Soren 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进