在oracle 中,可以用 select * from table start with...connect by ..... 做树型结构查询。 比如要体现bom 层次关系,员工与领导之间的层级关系。
CREATE TABLE TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
插入测试数据:
begin
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');
commit;
end;
-----子查父,父在前 ; 父查子,子在前 (prior如果固定在左边)
从Root往树末梢递归
select * from TBL_TEST
start with id=1
connect by prior id = pid
order by pid
--or
select * from TBL_TEST
start with id=1
connect by pid=prior id
order by pid
可以理解为跟prior在同一边的既是要查找的对象,如这里的是ID,就是代表要向ID方向递归
--------------------
从末梢往树ROOT递归
select * from TBL_TEST
start with id=5
connect by prior pid = id
order by id
--or
select * from TBL_TEST
start with id=5
connect by id = prior pid
order by pid
可以理解为跟prior在同一边的既是要查找的对象,如这里的是PID,就是代表要向PID方向递归
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14142626/viewspace-374883/ ,如需转载,请注明出处,否则将追究法律责任。