原文:http://blog.csdn.net/tianlincao/article/details/7258383
1. 建表
CREATE TABLE USERS.TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1'
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
2. 语法
select * from …. where [结果过滤条件语句]
start with [and起始条件过滤语句]
connect by prior [and中间记录过滤条件语句]
3. 例子
查找所有下级,包括当前条件数据
select * from tbl_test start with id = 1 connect by prior id = pid
注意:此sql能查找id=1的数据的所有下级,包括id=1的数据,写sql语句时要注意,因为是从id开始查找下级,所以connect by prior 子句的条件是id=pid
查询所有下级,不包括当前条件数据
select * from tbl_test start with pid = 1 connect by prior id = pid
查找所有上级
select * from tbl_test start with id = 5 connect by prior pid = id
因为是从id开始查找上级,所以connect by prior 子句的条件是pid=d