【问题标题】: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[]) ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多