如何在oracle中更新分层数据结构的所有子级记录

问题描述:

我在数据库中以分级顺序存储类别和分组。每个类别可能有其他类别和分组,因为它们是儿童。因此,无论何时将分组移到其他类别或分组下,其分类ID都会更新,并且所有子分组的类别ID也应该更新。如何在oracle中更新分层数据结构的所有子级记录

的分组表具有数据如下:

enter image description here

所以,如果我移动分组标识81至一个新的类别编号739720然后,我希望所有的孩子们分组的类别ID也被更新为739720

换句话说,我想选择分层数据结构中所有分组的子记录并更新它们的分类id。

我想在UPDATE之后的数据如下所示。

enter image description here

+0

我可能是第一个指出的是,如果数据模型是正确归你不会需要做到这一点 – APC

您可以使用MERGE声明:

MERGE INTO GROUPING dst 
USING (
    SELECT ROWID AS rid 
    FROM GROUPING 
    START WITH grouping_id = 81 
    CONNECT BY PRIOR grouping_id = parent_id 
) src 
ON (dst.ROWID = src.RID) 
WHEN MATCHED THEN 
    UPDATE SET CATEGORY_ID = 739720; 
+0

能这样用CONNECT BY – user1614862

+0

实现739720不是分组ID,它是一个分类ID。我只想更新儿童的类别标识,而不是分组标识或父母标识。 – user1614862

+0

@ user1614862更新 – MT0