5

編集 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) のリストを取得した場合、複数の更新ステートメントを実行する必要があります。誰かがこれを行うより良い方法を知っている場合は、私に知らせてください。

4

1 に答える 1

3

H2 は、1 つの SQL ステートメント内で同時に 2 つのテーブルを更新することをサポートしていません。2 つのステートメントを使用する必要があります。サポートされている構文については、UPDATEステートメント レイルロード ダイアグラムを参照してください。

于 2013-05-01T16:21:44.420 に答える