我可以将数组参数传递给CTE吗?

问题描述 投票:0回答:1

在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参数。有没有合理的方法来做到这一点?

postgresql common-table-expression
1个回答
0
投票

您可以使用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) ...

db<>fiddle

但你也可以直接使用= ANY数组:

WHERE ... nmuloc = ANY('{1,2,3}'::integer[]) ...
© www.soinside.com 2019 - 2024. All rights reserved.