PostgreSQL - Использование подзапроса для обновления значений нескольких столбцов

Мне нужно иметь возможность обновлять несколько столбцов в таблице) используя результат подзапроса. Простой пример будет выглядеть, как показано ниже -

UPDATE table1
SET (col1, col2) =
  ((SELECT MIN (ship_charge), MAX (ship_charge) FROM orders))
WHERE col4 = 1001; 

Как я могу сделать это в PostgreSQL?

Спасибо за любые советы!

ОБНОВЛЕНИЕ: Я прошу прощения за то, что сделал образец слишком простым для моего фактического Пример использования. Запрос ниже более точен -

UPDATE table1
SET    (TOTAL_MIN_RATE, TOTAL_MAX_RATE) = (SELECT AVG(o.MIN_RATE), AVG(o.MAX_RATE)
                           FROM   ORDR o INNER JOIN table2 ba ON (o.PAY_ACCT_ID = ba.ACCT_ID) 
                                         INNER JOIN table3 mb ON (ba.BANK_ID = mb.BANK_ID)
                               WHERE  ba.CNTRY_ID = table1.CNTRY_ID AND 
                                              o.STUS_CD IN ('01','02','03','04','05','06') AND
                                  ((o.FRO_CRNCY_ID = table1.TO_CRNCY_ID AND o.TO_CRNCY_ID = table1.FRO_CRNCY_ID) OR
                                   (o.TO_CRNCY_ID = table1.TO_CRNCY_ID AND o.FRO_CRNCY_ID = table1.FRO_CRNCY_ID))   
                               GROUP BY ba.CNTRY_ID)
31
задан user558122 18 September 2011 в 17:40
поделиться

1 ответ

Я должен был сделать, несколько вставок на таблице, берущей данные из двух таблиц без общих столбцов между ними и игнорирующей записи уже, представляют.

следующий sql был протестирован на Postgresql 11, хотя он должен хорошо работать на v9 +:

WITH permission_info AS (
    SELECT id
    FROM permission
    WHERE permission."key" LIKE 'prefix_for_admin_%'
), role_info AS (
    SELECT id 
    FROM role
    WHERE role."name" = 'Admin'
)
INSERT INTO role_permission_table
(
    role_id,
    permission_id
)
    SELECT role_info.id, permission_info.id FROM role_info, permission_info

ON CONFLICT DO NOTHING
;
0
ответ дан 27 November 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: