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

高分~~~~~~~~请教这个需求怎么实现!
有一个表,如下
                  ID                 BBB         PARNETID

1 1 |admin |0
2 20009 |20009 |1
3 20010 |20010 |1
4 20011 |20011 |1
5 20012 |20012 |20009
6 20013 |20013 |20009
7 20014 |20014 |20010
8 20015 |20015 |20012
9 20016 |20016       |20014
其中,PARENTID为父节点的ID。能否用一行sql查询,查询出所有的子节点和孙子节点,比如ID为1,则得到的结果是所有的9行记录,若ID为20009,则查询出的结果为2,5,6,8行记录。若用单纯的sql不行。则实现该功能的存储过程怎么写?



------解决方案--------------------
select * from xxx
start with id=1
connect by prior bbb=parentid;

要不就是connect by prior parentid=bbb,记不太清了
------解决方案--------------------
楼上说的是对的,递归实现

select * from test
start with id=1 //根接点
connect by prior id=PARNETID

prior 表示上条纪录
prior id=PARNETID 上条纪录的 id=本条的 PARNETID