create table PREREQ ( COURSE_ID NVARCHAR2(20), PREREQ_ID NVARCHAR2(20) ) ; insert into PREREQ (COURSE_ID, PREREQ_ID) values ('001', 'a-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('a-001', 'b-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('b-001', 'c-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('002', 'a-002'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('a-002', 'b-002'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('b-002', 'c-002'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('c-002', 'd-002'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('010', 'e-010'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('c-001', 'd-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('d-001', 'e-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('001', 'a1-001'); insert into PREREQ (COURSE_ID, PREREQ_ID) values ('d-001', 'e2-001'); commit; select * from prereq t start with t.course_id = '001' connect by prior t.prereq_id = t.course_id
参考 : http://laoli5290.iteye.com/blog/1563289