我开始使用 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/