首页 >数据库 >mysql教程 >如何使用 JOIN 修复无限期运行的 Oracle UPDATE 查询?

如何使用 JOIN 修复无限期运行的 Oracle UPDATE 查询?

Patricia Arquette
Patricia Arquette原创
2024-12-24 12:34:291021浏览

How to Fix an Oracle UPDATE Query with JOIN That Runs Indefinitely?

使用 Join 的 Oracle 更新查询

考虑以下 Oracle 更新查询:

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL);

问题:

查询执行由于缺少条件,该条件将确保子查询为 t1 中的每个更新行返回一行。

解决方案:

要解决此问题,条件必须添加到子查询中以将 t1 中的行与子查询中的行相关联。例如,可以使用以下条件:

AND t1.some_key = t2.some_key

生成的更新查询将如下所示:

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL
    AND t1.some_key = t2.some_key);

其他注意事项:

  • 上面的修改可以确保子查询为满足添加条件的每个 t1 行返回一行
  • 如果不想更新 t1 中的每一行,可以在主 UPDATE 语句中添加一个额外的 WHERE 子句来指定要更新的行。

以上是如何使用 JOIN 修复无限期运行的 Oracle UPDATE 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

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