【问题标题】:Can I pass an array parameter into a CTE?我可以将数组参数传递给 CTE 吗?
【发布时间】:2019-04-20 00:31:49
【问题描述】:
在 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】:
你可以使用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[]) ...