首页 新闻 搜索 专区 学院

如何遍历所有的父子节点?

0
悬赏园豆:5 [待解决问题]

各位好,有个问题请教一下.

如 有文件file.txt内容如下:
id pid name
2 1 d
1 0 a
3 1 b
4 2 c
5 3 e

id是不重复的,pid是父id,要求遍历所有的父子节点,实现如下的输出
0->1->2->4 a,d,c
0->1->3->5 a,b,e

moperyblue的主页 moperyblue | 菜鸟二级 | 园豆:201
提问于:2016-09-01 11:49
< >
分享
所有回答(2)
0

推荐查看《CTE  递归查询》,

create table #t 
(id int,
pid int,
name varchar(100)
)

insert into #t 

select 
2, 1, 'd' union    select
1, 0, 'a' union    select
3, 1, 'b' union    select
4, 2, 'c' union select
5, 3, 'e' 


;with cte as 
(
    select id,pid,name,name namepath
    from #t 
    where pid=0

    union all 

    select t.id,t.pid,t.name, cast(t.name+'->'+ c.namepath as varchar(100)) as namepath
    from #t t
    inner join cte as c
        on t.pid=c.id
)
select *
from cte

 

悦光阴 | 园豆:2251 (老鸟四级) | 2016-09-01 13:35

谢谢.数据不是存在数据库的  是从文件里读的 然后看看能不能用java或shell awk处理成(注:id是不重复的,pid是父id(即第二列),要求遍历所有的父子节点,实现如下的输出)

0->1->2->4 a,d,c
0->1->3->5 a,b,e

支持(0) 反对(0) moperyblue | 园豆:201 (菜鸟二级) | 2016-09-01 13:38
0

读取后构造一个树,然后输出

浴子风 | 园豆:523 (小虾三级) | 2016-09-01 14:59

能举个栗子吗? 类要怎么设计呢?

支持(0) 反对(0) moperyblue | 园豆:201 (菜鸟二级) | 2016-09-01 15:00

@moperyblue: 不会java、、、里面应该有现成的树吧,或者你自己定一个,有parent,有child集合就行

支持(0) 反对(0) 浴子风 | 园豆:523 (小虾三级) | 2016-09-01 15:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册