Postgresql
如何在 postgres 上同時通過連接對多個表執行更新查詢?
在 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
一次的值。但它沒有性能或事務優勢。