web-dev-qa-db-ja.com

UPDATEクエリで3つのテーブルを結合するにはどうすればいいですか?

私は質問をして、助けたこの返事を得ました。

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1

今、私はこのようなものが関係している3つのテーブルがあるならばこれをすることを探しています。

    UPDATE tableC c JOIN tableB b JOIN tableA a

私の質問は基本的には...これはUPDATEステートメントで3つのテーブル結合をすることは可能ですか?それに正しい構文は何ですか?ありがとうございました。私はしますか...

 JOIN tableB, tableA
 JOIN tableB JOIN tableA
439
Ricky

答えはyesです。

それを試してみてください

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1

編集:

一般的なアップデート参加の場合:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]
759
echo_Me

同じ結果を得るための代替方法 は、JOINキーワードをまったく使用しないことです。

UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col
39

以下は、JOINWHERE bothを含むUpdateクエリです。私たちが複数のjoin/where節を使うことができるのと同じように、それがあなたを助けることを願っています -

UPDATE opportunities_cstm oc JOIN opportunities o ON oc.id_c = o.id
 SET oc.forecast_stage_c = 'APX'
 WHERE o.deleted = 0
   AND o.sales_stage IN('ABC','PQR','XYZ')
7
Nitin Shukla

ブラストされた「回答へのコメント」は、まだ終わっていなくても、編集全体を投稿することなく改行を取らないため、私は独立した回答として追加している代替の一般計画。

UPDATE table A
JOIN table B ON {join fields}
JOIN table C ON {join fields}
JOIN {as many tables as you need}
SET A.column = {expression}

例:

UPDATE person P
JOIN address A ON P.home_address_id = A.id
JOIN city C ON A.city_id = C.id
SET P.home_Zip = C.zipcode;
2
UncaAlby

PostgreSQLの例では:

UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0; 
0
Oleg Potemkin