Могу ли я передать параметр массива в CTE? - PullRequest
0 голосов
/ 20 апреля 2019

В PostgreSQL я хочу сделать что-то вроде

WITH vars AS %s
SELECT * FROM table2
   INNER JOIN table1 ON table2.t1id = table1.id
   WHERE table1.var in (select * from vars)
   AND table2.var in (select * from vars)

А затем передайте %s в качестве параметра ARRAY. Есть ли разумный способ сделать это?

1 Ответ

0 голосов
/ 20 апреля 2019

Вы можете использовать VALUES, как в:

WITH vars
     (var)
AS
(
VALUES (1),
       (2),
       (3)
)
...
WHERE ... nmuloc IN (SELECT var
                            FROM vars) ...

Или unnest():

WITH vars
     (var)
AS
(
SELECT unnest('{1,2,3}'::integer[])
)
...
WHERE ... nmuloc IN (SELECT var
                            FROM vars) ...

дб <> скрипка

Но вы также можете напрямую использовать массив с = ANY:

WHERE ... nmuloc = ANY('{1,2,3}'::integer[]) ...
...