是否可以将数组参数传递到 CTE 中



在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 参数传入。有什么合理的方法可以做到这一点吗?

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

最新更新