我有一个包含三列的表:Parent,Child和Flag。当一个Child拥有自己的Children时,它也会出现在Parent列中。
层次结构没有标准化级别,因此,成员可以将6级作为最后一级,而其他成员的最后级别可以是3级。
示例:
1
- 1.1
-- 1.1.1
--- 1.1.1.1
- 1.2
-- 1.2.1
- 1.3
-- 1.3.1
--- 1.3.1.1
----1.3.1.1.1
2
- 2.1
-- 2.1.1
...
我需要的是更新Parent以1开头的记录及其子项,子项的子项等等的记录的标志......在这种情况下,只有:
1
- 1.1
-- 1.1.1
--- 1.1.1.1
- 1.2
-- 1.2.1
- 1.3
-- 1.3.1
--- 1.3.1.1
----1.3.1.1.1
但请记住,在表格中,它的结构不是那样,而是分为两列,如:
Parent |Child
1 1.1
1 1.2
1 1.3
1.1 1.1.1
1.1.1 1.1.1.1
1.2 1.2.1
...
提前感谢所有人!
答案 0 :(得分:1)
如果我理解你的问题,你想要通过他们的第一个父母更新行。
你可以connect_by_root
看here。
基本上(没有测试过)类似的东西
update hierarchy_table h_outer
set flag = 'X'
where h_outer.rowid in (
select rid
from (
select h.row_id as rid , connect_by_root parent_id as root_parent
from hierarchy_table h
start with parent = null
connect by prior child_id = parent_id
)
where root_parent like '1%'
)
答案 1 :(得分:1)
希望这符合您的要求
UPDATE hierarchy_table a
SET a.flag = 'X'
WHERE a.ROWID IN (SELECT b.ROWID
FROM hierarchy_table b
START WITH b.PARENT = '1' -- Change start point here
CONNECT BY PRIOR b.child = b.PARENT);