編集 mysql データベースの上に H2 データベースがあることがわかりました。私が書いたクエリは、代わりに H2 にヒットします。うまくいくかどうか研究を続けます
同時に更新したい 2 つのテーブルがあり、そのうちの 1 つの値は、もう 1 つのテーブルに格納されている値によって決定されます。私の更新クエリは次のようになります。
UPDATE table1 AS A INNER JOIN table2 AS B
ON A.COL1 = B.COL1
AND A.COL2 = B.COL2
SET A.COL3 = 'SOME VAL',
B.COL4 = B.COL4 - A.COL4,
B.COL5 = B.COL5 - A.COL4
WHERE A.ID IN (23,5,21)
INNER JOIN を実行している場所で「Expected "SET"」という構文エラーが発生します。
LEFT JOINとhttp://dev.mysql.com/doc/refman/5.0/en/update.htmlを使用して、MySQL の UPDATE 複数テーブルごとにこの結合更新を実行できるはずだと思います。私の構文エラーが何か知っている人はいますか?
後世のための更新
まず、Thomas Mueller の助けに感謝します。
私は最終的に次の構文を使用しましたが、やや紛らわしいことがわかったので、将来の視聴者のためにここに残します.
UPDATE TABLE1 SET(COL1, COL2) =
( SELECT T1.COL1 - T2.AMNT, T1.COL2 + T2.AMNT
FROM TABLE1 T1 RIGHT JOIN TABLE2 T2
ON T1.COL3 = T2.COL3
AND T1.COL4 = T2.COL4
WHERE T2.ID = 23)
WHERE EXISTS
( SELECT *
FROM TABLE2
WHERE TABLE1.COL3 = TABLE2.COL3
AND TABLE1.COL4 = TABLE2.COL4
AND TABLE2.ID = 23)
注: 以下で説明する構文を機能させることができなかったため、最初の選択で結合を使用する必要がありました。
このメソッドを使用した結果、table2 ID (元の例では 23,5,21) のリストを取得した場合、複数の更新ステートメントを実行する必要があります。誰かがこれを行うより良い方法を知っている場合は、私に知らせてください。