Рассмотрим следующую структуру с некоторыми узлами:
1
/\
2 3
| |
4 5
| |
6 7
|
8
или
with mydata as (
select 8 id ,6 id_before, 400 datum from dual union all
select 6,4, 300 from dual union all
select 4, 2, 200 from dual union all
select 2,1, 10 from dual union all
select 3, 1, 60 from dual union all
select 5, 3, 800 from dual union all
select 7, 5, 900 from dual
)
Теперь, учитывая id
узла, я хочу получить root node id
Например, для узла 7
root Примечание 1
, для 5
root Узел 1
для 4
root Узел 1
et c.
Я пробовал что-то вроде этого:
select id, id_before,datum, SYS_CONNECT_BY_PATH(id_before,'/') as path,
SYS_CONNECT_BY_PATH(datum,'/') as datapath,
level,
CONNECT_BY_ROOT id_before
from mydata
where id=7
connect by id_before = prior id
с разочаровывающими результатами:
7 5 900 /1/3/5 /60/800/900 3 1
7 5 900 /3/5 /800/900 2 3
7 5 900 /5 /900 1 5
Есть идеи, как это исправить?
Спасибо.