1. ホーム
  2. postgresql

[解決済み] PostgreSQLで更新+結合を行うには?

2022-03-15 13:50:08

質問

基本的には、このようにしたい。

update vehicles_vehicle v 
    join shipments_shipment s on v.shipment_id=s.id 
set v.price=s.price_per_vehicle;

MySQL(私のバックグラウンド)ではうまくいくはずなのですが、postgresではうまくいかないようです。私が得たエラーは、次のとおりです。

ERROR:  syntax error at or near "join"
LINE 1: update vehicles_vehicle v join shipments_shipment s on v.shi...
                                  ^

きっと簡単な方法があるのでしょうが、適切な構文が見当たりません。では、PostgreSQLではどのように書けばいいのでしょうか?

どのように解決するのですか?

その UPDATE構文 があります。

[ WITH [ RECURSIVE ] with_query [, ... ] ]です。
UPDATE [ ONLY ] table [ [ AS ] alias ]。
    SET { column = { expression | DEFAULT }. |
          ( 列 [, ...] ) = ( { 式 | DEFAULT } [, ...] ) }. [, ...]
    [ FROM from_list ]です。
    [ WHERE condition | WHERE CURRENT OF CURSOR_NAME ]である。
    [RETURNING * | output_expression [ [ AS ] output_name ]。[, ...] ]

あなたの場合、こうしたいのだと思います。

UPDATE vehicles_vehicle AS v 
SET price = s.price_per_vehicle
FROM shipments_shipment AS s
WHERE v.shipment_id = s.id