INNER JOIN を含む Oracle UPDATE ステートメント: ORA-00933 エラーのトラブルシューティング
Oracle で UPDATE
を組み込んだ SQL INNER JOIN
ステートメントを実行すると、ORA-00933 エラー (「SQL コマンドが正しく終了しませんでした」) が発生する場合があります。 このエラーは MySQL ではまれですが、Oracle では頻繁に発生します。次の例を考えてみましょう。これは MySQL では正しく動作しますが、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 クエリを再構築することが含まれます。 ここでは 2 つの効果的な方法を紹介します:
方法 1: サブクエリを使用する
このアプローチでは、サブクエリを使用して table1
:
<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>
EXISTS
句は、table2
内のエントリが一致する行のみが更新されるようにし、エラーを防ぎます。
方法 2: 更新可能なインライン ビューを利用する
このメソッドは更新可能なインライン ビューを使用します:
<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 がインライン ビューを更新可能であると識別できるかどうかにかかっています。 更新可能なビューを管理する特定のルールについては、Oracle のドキュメントを参照してください。 特定のシナリオでは、この方法の方が方法 1 よりも効率的である可能性があります。 特定のニーズとデータベース構成に最も適した方法を選択してください。
以上がOraCle-00933インターン結合を使用してOracle UpdateステートメントでORA-00933エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。