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

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

Barbara Streisand
发布: 2025-01-25 04:51:09
原创
872 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板