INNER JOIN を使用した Oracle UPDATE: ORA-00933 の回避
内部結合を使用して Oracle テーブルを更新する場合、一般的なエラーは ORA-00933: 「SQL コマンドが正しく終了しませんでした。」です。 これは、間違った構文を使用することで発生します。 MySQL などの他のデータベースで使用される標準の UPDATE ... INNER JOIN ... SET ...
構文は、Oracle では直接機能しません。
問題とオラクルの解決策
問題のある構文は次のようになります:
<code class="language-sql">UPDATE table1 INNER JOIN table2 ON table1.value = table2.DESC SET table1.value = table2.CODE WHERE table1.UPDATETYPE='blah';</code>
Oracle には別のアプローチが必要です。 正しい方法は次のとおりです:
<code class="language-sql">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);</code>
これは、サブクエリを使用して更新の table2.CODE
値を取得し、EXISTS
句を使用して、一致する行が table2
に存在する場合にのみ更新が行われるようにします。これにより、存在しない値を使用して更新しようとすることによって発生するエラーが防止されます。
代替方法: インライン ビュー
もう 1 つのオプションには、インライン ビューの使用が含まれます。
<code class="language-sql">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;</code>
このメソッドが成功するかどうかは、Oracle がインライン ビューを更新可能とみなすかどうかにかかっており、これは特定のデータベース ルールによって管理されます。 通常、前の方法の方が信頼性が高くなります。 ニーズに最も適した方法を選択し、常に徹底的にテストしてください。
以上がOra-00933を避けるために、Oracleにインナーが結合してテーブルを正しく更新する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。