PostgreSQLで更新+結合を行うにはどうすればいいですか? 質問する

PostgreSQLで更新+結合を行うにはどうすればいいですか? 質問する

基本的に、私はこれをやりたいです:

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 ではこれをどのように記述すればよいのでしょうか?

ベストアンサー1

UPDATE構文は:

[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table [ [ AS ] alias ]
    SET { column = { expression | DEFAULT } |
          ( column [, ...] ) = ( { expression | 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 

または、2 つ以上のテーブルを結合する必要がある場合:

UPDATE table_1 t1
SET foo = 'new_value'
FROM table_2 t2
    JOIN table_3 t3 ON t3.id = t2.t3_id
WHERE
    t2.id = t1.t2_id
    AND t3.bar = True;

おすすめ記事