日期:2014-05-17  浏览次数:20950 次

如何查询树形结构中的节点和根节点关系
表结构如下:
create   table   (
a   varchar(10),
aname   varchar(10),
afather   varchar(10)
)

我想要如下的结果:
a   aname   aroot   arootname

应该怎么办

------解决方案--------------------
想了一分钟,没明白楼主你所说的问题
再说清楚点,大家才能帮你解决
------解决方案--------------------
这个递归函数应该能帮到你:

create table test (
a varchar(10),
aname varchar(10),
afather varchar(10)
)

insert into test values( '1 ', 'a ', ' ');
insert into test values( '2 ', 'b ', '3 ');
insert into test values( '3 ', 'c ', '5 ');
insert into test values( '4 ', 'd ', '6 ');
insert into test values( '5 ', 'e ', '1 ');
insert into test values( '6 ', 'f ', '5 ');
commit;

select * from test

create or replace function get_root(pa in varchar2) return varchar2 as
cursor cur_b(p in varchar2) is
select a, aname, afather from test where a = p;
t test%rowtype;
a varchar2(10);
b varchar2(10);
begin
open cur_b(pa);
fetch cur_b
into t;
a := t.afather;
b := t.a;
close cur_b;
if a is null then --假设根节点的afather为空
return b;
else
return get_root(a);
end if;
end get_root;

select a.a, a.aname, c.af, c.an
from test a,
(select b.a aa, a.a af, a.aname an
from test a, (select a, get_root(a) id from test) b
where a.a = b.id) c
where a.a = c.aa