ホームページ >データベース >mysql チュートリアル >OracleにInner結合を使用して更新クエリを正しく実行する方法は?
Oracle で INNER JOIN を使用した UPDATE クエリの正しい実行
MySQL の次のクエリは正常に実行できます:
<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>SQL错误:ORA-00933:SQL命令未正确结束 00933. 00000 - "SQL command not properly ended"</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>
このメソッドはサブクエリを使用して、結合条件に基づいて table1.value の更新された値を取得します。これにより、一致する行のみが更新されることが保証されます。
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にInner結合を使用して更新クエリを正しく実行する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。