级联查询 oracle 中connect by prior实现递归查询

 

对于大多数的程序员 遇到级联查询的概率很高  今儿写一下级联查询的sql  网上也有一些 我做一下 自己的总结

 

CREATE TABLE 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');

--------------------------------------------------------------------------------------------------

    ID                NAME             PID

    1                    10                  0

    2                    11                  1

    3                    20                  0

    4                    12                  1

    5                    121                 2

----------------------------------------------------------------------------------------------------

       从Root往树末梢递归

  select * from TBL_TEST

  start with id=1

  connect by prior id = pid  

注:(start with id = 1  表示的是 以1为根节点的树  从跟到叶的查询 此查询语句 为 一颗树   , PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 从而 判定 查询顺序 为 从跟到叶)

   查询结果

 

ID       NAME         PID

1          10                0
2          11                1
5          121              2
4          12                1

-----------------------------------------------------------------------------------------------------

  从末梢往树ROOT递归

  select * from TBL_TEST

  start with id=5

  connect by prior pid = id

 上一条记录的 父节点 为本记录的 节点   既 此查询出来的 为一颗倒树 既从叶到跟的顺序

 

运行结果:

ID         NAME          PID

5            12                 1
2            1                    1
1            1                    0

 

                                 本文 主要是对 http://www.poluoluo.com/jzxy/201004/81956.html  文章进行补充    

                                 

 

              

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值