PostgreSQL: используйте столбец в качестве МАССИВА в конструкции С

#arrays #postgresql #common-table-expression

Вопрос:

Я пытаюсь выполнить следующий запрос (я прокомментировал несколько вещей, которые я пробовал до сих пор):

 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» в качестве массива в «viapath»?

Комментарии:

1. Несколько несвязанный вопрос: можно ли объединить массив внутри CTE res вместо того, чтобы делать это в другом CTE? На первый взгляд это кажется ненужным.

Ответ №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;
 

Комментарии:

1. Спасибо! Я попробовал это сделать, но без скобок. Он работает со скобками