ITPub博客

首页 > Linux操作系统 > Linux操作系统 > select * from table start with...connect by .....

select * from table start with...connect by .....

原创 Linux操作系统 作者:Oracle_Iove 时间:2008-07-10 10:35:26 0 删除 编辑

在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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-05-07

  • 博文量
    4
  • 访问量
    17799