oracle - 使用先前连接的更新查询的 sql 语法

标签 oracle hierarchical-query

我开始使用 sql 并面临分层查询。同时我成功地选择了 connect by prior 的行命令,但未能更新。这是我的更新查询:

update HTABLE set status = 'INACTIVE'
  WHERE STATUS <> 'CLOSE'
  Connect by prior PARENT_ID=ID start with PARENT_ID=12345;

我收到了 SQL Error: ORA-00933: SQL command not properly ended并且很高兴知道如何使用分层更新表..

谢谢!

编辑
我也试过把where条件在 start with ,没有帮助:
update HTABLE set status = 'INACTIVE'
  Connect by prior PARENT_ID=ID start with PARENT_ID=12345 AND STATUS <> 'CLOSE';

最佳答案

分层查询仅适用于 SELECT。它不适用于 UPDATE (我同意它可能会很整洁)。

所以你可以做的是:

update HTABLE 
set status = 'INACTIVE'
WHERE STATUS <> 'CLOSE'
and id in ( select c.id
            from htable
            connect by prior ID = PARENT_ID 
            start with PARENT_ID = 12345);

注意列的顺序 connect by prior ID = PARENT_ID .通常我们想从 START WITH 行走下树,这就是我所做的。您的订购 connect by prior PARENT_ID = ID沿着树从 12345 走到它的 parent 、祖 parent 等。如果这是你想要的,切换 connect by条款回来。

关于oracle - 使用先前连接的更新查询的 sql 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45296550/

相关文章:

sql - 表 EMP 正在发生变化,触发器/函数可能看不到它错误

postgresql - 如何将 oracle 分层查询转换为 postgresql?

sql - 通过查询连接

sql - Oracle分层查询中如何使用WHERE-CLAUSE

sql - oracle中如何将数字转换为日期时间

c# - 如何在 Oracle 查询 "Select-For-Update"中参数化等待时间

sql - 在多个 Oracle 服务器上运行相同的 sql 查询和聚合结果的工具

oracle - 如何判断通过重建索引将释放的表空间量

sql - 使用 Connect by 获取树中的最顶层部分

sql - H2查询中的无限循环