ホームページ > データベース > mysql チュートリアル > OraCle-00933インターン結合を使用してOracle UpdateステートメントでORA-00933エラーを修正するにはどうすればよいですか?

OraCle-00933インターン結合を使用してOracle UpdateステートメントでORA-00933エラーを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-25 04:46:10
オリジナル
542 人が閲覧しました

How to Fix ORA-00933 Error in Oracle UPDATE Statements with INNER JOINs?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート