【问题标题】:PostgreSQL: use column as ARRAY in a WITH constructionPostgreSQL:在 WITH 构造中使用列作为数组
【发布时间】:2021-12-18 12:01:25
【问题描述】:

我正在尝试运行以下查询(我对我迄今为止尝试过的一些事情进行了评论):

WITH
res AS (
    SELECT * ...
), -- res has a column of integers called "node". I need to transform this column into an array to use it in viapath below
nodes AS (
  -- SELECT ARRAY[node] FROM res
  -- SELECT array_agg(node) FROM res
),
viapath AS (
    SELECT * FROM pgr_dijkstraVia(
        'SELECT id, source, target, cost FROM edge_net',
        nodes  -- array[54, 37, 897, 435]
    )
)
SELECT * FROM viapath;

它使用数组 [54, 37, 897, 435] 但不能使用“节点”。通过我的试验,我收到一个“列“节点”不存在”。如何将“res”中的“node”列用作“viapath”中的数组?

【问题讨论】:

  • 稍微不相关的问题:是否可以在 CTE res 中聚合数组,而不是在另一个 CTE 中进行聚合?乍一看似乎没有必要。

标签: arrays postgresql common-table-expression


【解决方案1】:

您可以使用子查询表达式(select array_agg(node) from res)

WITH
res AS (SELECT * ...),
viapath AS 
(
    SELECT * FROM pgr_dijkstraVia
    (
        'SELECT id, source, target, cost FROM edge_net',
        (select array_agg(node) from res)
    )
)
SELECT * FROM viapath;

【讨论】:

  • 谢谢!我试过了,但没有括号。它适用于括号
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多