首页 > 解决方案 > 在 where 子句 Postgresql 中的情况

问题描述

我有一个这样的查询:

SELECT *  
FROM table 
WHERE t1.name||t1.lastname||... ilike ANY (ARRAY['%Muller%'])  
OR t1.name||t1.lastname||... ilike all (ARRAY['%Muller%'])  

我想添加 CASE WHEN 所以我的查询是:

 SELECT *  
 FROM table 
 WHERE t1.name||t1.lastname||... ilike  CASE WHEN TRUE IS TRUE THEN  
 ANY (ARRAY['%Muller%'])  ELSE all (ARRAY['%Muller%'])  END

所以我可以避免再次复制和粘贴整个字段。

标签: sqlpostgresqlswitch-statementwhere-clause

解决方案


您可以使用LATERAL避免多次连接:

SELECT *  
FROM table t1, LATERAL(SELECT t1.name||t1.lastname||...) s(c)
WHERE s.c ilike ANY (ARRAY['%Muller%'])  
  OR s.c ilike ALL (ARRAY['%Muller%'])  

推荐阅读