1. ホーム
  2. sql

[解決済み] Oracleの内部結合を使用したUpdateステートメント

2022-03-16 06:50:29

質問

MySQLで問題なく動作するクエリがあるのですが、Oracleで実行すると以下のエラーが発生します。

<ブロッククオート

SQLエラーです。ORA-00933: SQL コマンドが正しく終了していません。
00933. 00000 - "SQLコマンドは正しく終了していません。

クエリーは

UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';

解決方法は?

その構文はOracleでは有効ではありません。 こうすればいいんだ。

UPDATE table1 SET table1.value = (SELECT table2.CODE
                                  FROM table2 
                                  WHERE table1.value = table2.DESC)
WHERE table1.UPDATETYPE='blah'
AND EXISTS (SELECT table2.CODE
            FROM table2 
            WHERE table1.value = table2.DESC);

または かもしれない ができる。

UPDATE 
(SELECT table1.value as OLD, table2.CODE as NEW
 FROM table1
 INNER JOIN table2
 ON table1.value = table2.DESC
 WHERE table1.UPDATETYPE='blah'
) t
SET t.OLD = t.NEW

インラインビューがOracleによって更新可能であるとみなされるかどうかに依存します。 ( 2番目のステートメントが更新可能であるかどうかは、以下のルールに依存します。 ここで ).