Что вам нужно сделать, это агрегировать значение asset_name
на applications
и установить asset_list
на это агрегированное значение.
Проблема в том, что вы не можете сделать что-то вроде
UPDATE ..
SET asset_list = ARRAY_AGG(asset_name)
FROM ...
потому что агрегатные функции не разрешены в таких обновлениях.
Итак, есть два других способа сделать это:
UPDATE app_table
SET asset_list = _asset_list
FROM (
SELECT applications, ARRAY_AGG(asset_name ORDER BY asset_name) AS _asset_list
FROM asset_table
GROUP BY applications
) AS a
WHERE app_name = applications;
https://www.db -fiddle.com / f/ pKB5k6Lexwzqv6ZbCCdJay / 0
Сначала создается результирующий набор различных имен приложений и массив всех asset_name
для каждого из имен приложений.Затем он обновляет таблицу как обычно с этим значением массива.
Другой способ:
UPDATE app_table
SET asset_list = (SELECT ARRAY_AGG(asset_name ORDER BY asset_name)
FROM asset_table
WHERE applications = app_name)
;
https://www.db -fiddle.com / f / 8oVWsubXW93n142gtZYLXB / 0
Это обновит каждую запись в app_table и вычислит значение массива на лету для каждой записи.