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

Asf*_*sfK 4 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;
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

编辑 我也试图把where条件放在start with, not help 中:

update HTABLE set status = 'INACTIVE'
  Connect by prior PARENT_ID=ID start with PARENT_ID=12345 AND STATUS <> 'CLOSE';
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 5

分层查询仅适用于 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);
Run Code Online (Sandbox Code Playgroud)

注意列的顺序connect by prior ID = PARENT_ID。通常我们想从 START WITH 行走下树,这就是我所做的。您的排序connect by prior PARENT_ID = ID从 12345 沿着树向上走到它的父母、祖父母等。如果这是您想要的,请将connect by子句切换回来。