oracle中递归查询用start with ... connect by prior... 字句
语法:
select 字段 from 表名 where 条件 start with 条件 connect by 条件
假设有一张表结构如下:
create table test(id number, name varchar2(40), p_id number);
--查询id为10的所有子节点
--我的理解:先找到id=10的记录,然后找谁的p_id=10,如此找下去,是由根节点找叶节点
select * from test start with id = 10 connect by prior id = p_id;
<==>
select * from test start with id = 10 connect by p_id = prior id;
--查询id为10的所有父节点
--我的理解:先找到id=10的记录,然后找这条记录的p_id,再找p_id的p_id,如此找下去,直到找到根节点,是由叶节点找根节点
select * from test start with id = 10 connect by prior p_id = id;
<==>
select * from test start with id = 10 connect by id = prior p_id;
说明:
1.prior如果省略,不进行深层递归查询
2.prior如果在等号左边,表示从根节点向叶子节点检索,也叫做向下查询
3.prior如果在等号右边,表示从叶子节点向根节点检索,也叫做向上查询
-------------------------------------------------------------------------------------------
补充:
prior可以在操作符的任意一边,它的作用就是指定父节点。
本文转自 手不要乱摸 51CTO博客,原文链接:http://blog.51cto.com/5880861/1397468