首页 >数据库 >mysql教程 >如何在Oracle中正确更新带有内连接的表以避免ORA-00933?

如何在Oracle中正确更新带有内连接的表以避免ORA-00933?

Barbara Streisand
Barbara Streisand原创
2025-01-25 04:51:09878浏览

How to Correctly Update Tables with Inner Joins in Oracle to Avoid ORA-00933?

> oracle更新带有内在的加入:避免ORA-00933

>

>使用内部加入更新Oracle表时,常见错误是ORA-00933:“ SQL命令未正确结束。” 这是由于使用错误的语法而产生的。 MySQL(例如MySQL)中使用的标准语法在Oracle中不起作用。UPDATE ... INNER JOIN ... SET ...

问题和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需要不同的方法。 这是正确的方法:

<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>
>这使用一个子查询来获取更新的

>table2.CODEEXISTS>子句,以确保更新仅在匹配行中存在table2中才会发生。这阻止了试图使用不存在的值更新引起的错误。

一种替代方法:内联视图>

另一个选项涉及使用内联视图:

<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中正确更新带有内连接的表以避免ORA-00933?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn