首页 >数据库 >mysql教程 >如何使用联接正确更新 Oracle 表并避免 ORA-00933 错误?

如何使用联接正确更新 Oracle 表并避免 ORA-00933 错误?

Barbara Streisand
Barbara Streisand原创
2024-12-29 00:13:11416浏览

How to Correctly Update Oracle Tables Using Joins and Avoid ORA-00933 Errors?

使用联接更新 Oracle 表

目标是使用联接更新表并遇到错误“ORA-00933: SQL 命令未正确结束。”

出现这种情况是因为提供的查询在语法上不正确。查询逻辑是计算由公共列连接的多个表的总计,并用计算出的总计更新原始表。

要解决此问题,我们建议使用 MERGE 语句,它提供了更明确的方式根据条件更新数据。 MERGE 语法更有效地与业务规则保持一致。

这是使用 MERGE 语句的修改后的查询:

MERGE INTO table1 tab1 
USING
(
  SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total
  FROM table2 tab2,
    table3 tab3 ,
    table4 tab4
  WHERE tab2.id        = tab3.id
  AND tab3.id            = tab4.id
  AND tab4.indicator             ='Y'
  GROUP BY tab3.name,
    tab3."add"
) t1
ON (tab1.id      = t1.id)
WHEN MATCHED THEN
  UPDATE SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total;

此 MERGE 语句:

  • 执行表连接计算每个匹配行的总计。
  • 使用 ON 子句来匹配行基于 id 列。
  • 通过将计算出的总计添加到现有的 Total_adjusted_cost 列来更新 table1 中的匹配行。

以上是如何使用联接正确更新 Oracle 表并避免 ORA-00933 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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