Случай, когда в пункте, где Postgresql - PullRequest
0 голосов
/ 19 октября 2018

У меня такой запрос:

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

, чтобы я мог избежать копирования и вставки целых полейеще раз.

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете использовать 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%'])  
...