oracle中的递归查询

本文介绍了Oracle数据库中两种实现递归查询的方法,一种使用START WITH和CONNECT BY PRIOR语法,另一种利用WITH子句进行自连接实现更灵活的递归查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle 中在有层级关系的表中,往往会用到递归查询查表数据之间的关系。

         递归查询中目前得知的有两种,​一种是:

        1.  select *    from   table_name  

               start with    起始条件 where   ***   ------起始节点

             connect by prior  ***= ***       -------递归条件

         2.  WITHT(storage_id,storage_name,parent_storage_id,storage_level,path,

              ​top_manager) AS  ( ---- 结构写出来

             SELECT storage_id,storage_name, parent_storage_id,

             storage_level,'\' || storage_name -- 路径拼接 ,

            storage_name AS top_manager ---- 原来的CONNECT_BY_ROOT   FROM  

          table_name    WHERE parent_storage_id = 'J001' ---- 原来的START WITH条件

          UNION ALL ---- 下面是递归部分

         SELECT e.storage_id,e.storage_name, e.parent_storage_id, e.storage_level,

          t.path || '\' || e.storage_name, ---- 把新的一截路径拼上去

          t.top_manager ---- 根节点只有一个

         FROM t, table_name e ---- 典型写法,把子查询本身和要遍历的表作一个连接

          WHERE t.storage_id = e.parent_storage_id ---- 原来的CONNECT BY条件

         ) ---- WITH定义结束

     SELECT * FROM T

第二种方法是在oracle 11 之后新增加的,第二种相对较灵活,查询效率待证!​


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值