在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的更新值。它确保只更新匹配的行。
第二种方法
<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中的内连接正确执行更新查询?的详细内容。更多信息请关注PHP中文网其他相关文章!