Oracle で INNER JOIN を使用した UPDATE クエリの正しい実行
MySQL の次のクエリは正常に実行できます:
UPDATE table1 INNER JOIN table2 ON table1.value = table2.DESC SET table1.value = table2.CODE WHERE table1.UPDATETYPE='blah';
ただし、Oracle で同じクエリを実行すると、次のエラーが発生します:
<code>SQL错误:ORA-00933:SQL命令未正确结束 00933. 00000 - "SQL command not properly ended"</code>
解決策
このクエリで使用されている構文は 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);
このメソッドはサブクエリを使用して、結合条件に基づいて table1.value の更新された値を取得します。これにより、一致する行のみが更新されることが保証されます。
2 番目の方法
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 は、特定のルールに応じてインライン ビューを更新可能とみなす必要があります。
以上がOracleにInner結合を使用して更新クエリを正しく実行する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。