您的位置:首页 > 数据库 > Oracle

oracle中的递归查询

2017-03-14 14:08 246 查看
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 之后新增加的,第二种相对较灵活,查询效率待证!​
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 递归 数据