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 update joinの回答では、JOINが使用されている場合でも、通常、更新の影響は単一のテーブルでのみ発生することに注意してください。
ここでの目的は、1つのクエリで複数のテーブルを更新することです。 1つのテーブルだけではありません。
なぜあなたがそうしたいのか分かりません。 1つのトランザクション内の2つのUPDATEステートメントは問題なく機能し、1つのステートメントと比較して追加のオーバーヘッドが発生することはありません。
つまり、それは 書き込み可能な共通テーブル式 を使用することで可能ですです
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);
このソリューションには確かに1つの利点があります。serial_number
の値を一度だけ指定する必要があります。ただし、パフォーマンスやトランザクション上の利点はありません。
Set句の書き込みスコープは1つのテーブルのみを許可する更新部分で言及されているテーブルに制限されているため、postgresqlでは不可能です。句。