Postgresql

如何在 postgres 上同時通過連接對多個表執行更新查詢?

  • August 23, 2018

在 MySQL 中,我可以進行這樣的查詢

UPDATE 
   prd_sectionshapename  se
inner join 
   prd_shape s
ON
   s.id = se.shape_id
SET
  se.company_shape_name = 'ABC',
  s.name_en = 'Another name'
WHERE s.serial_number = '1234ST';

在 Postgres 中,我需要分成 2 個查詢

UPDATE prd_shape AS s
SET name_en = 'Another name'
WHERE s.serial_number = '1234ST';


UPDATE prd_sectionshapename AS se
SET company_shape_name = 'ABC'
FROM prd_shape s
WHERE se.shape_id = s.id and s.serial_number = '1234ST';

我的問題是可以像 MySQL 一樣在 1 個查詢中完成嗎?

請注意,我在網際網路上找到的其他 postgres 更新連接答案通常表明更新效果僅發生在單個表上,即使使用了 JOIN 也是如此。

我的目的是在一個查詢中更新多個表。不只是一張桌子。

我不明白你為什麼要這樣做。與單個語句相比,單個事務中的兩個 UPDATE 語句就可以了,並且不會產生任何額外的成本。


話雖如此:可以通過使用可寫的公用表表達式

with shape_update as (
 UPDATE prd_shape
  SET name_en = 'Another name'
 WHERE serial_number = '1234ST'
 returning id, serial_number
)
UPDATE prd_sectionshapename 
 SET company_shape_name = 'ABC'
WHERE (shape_id, serial_number) IN (select id, serial_number from shape_update);

該解決方案確實有一個優勢:您必須只指定serial_number一次的值。但它沒有性能或事務優勢。

引用自:https://dba.stackexchange.com/questions/215653