欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle connectby的层级排序

程序员文章站 2022-07-04 13:56:52
oracle 的connect by 相信大家都用了不少,但是很少进行深入的细化,以为已经用的很熟了,不需要做深化,这是误导自己,知识点尽量深化。 今天碰到了一个问题,写一个组织树,查询的时候要求即...

oracle 的connect by 相信大家都用了不少,但是很少进行深入的细化,以为已经用的很熟了,不需要做深化,这是误导自己,知识点尽量深化。

今天碰到了一个问题,写一个组织树,查询的时候要求即要保持层级的完整关系,又要求在层级内进行排序,

于是,百度了下,有这样一个语法

对于层次查询如果用order by排序,比如order by last_name则是先做完层次获得level,然后按last_name 排序,这样破坏了层次,比如特别关注某行的深度,按level 排序,也是会破坏层次的。在oracle10g中,增加了siblings 关键字的排序。

语法:order siblings by

它会保护层次,并且在每个等级中按expre排序。

 select level as 等级,  
        connect_by_isleaf as 是否是叶子节点,  
        lpad(' ', level * 2 - 1) || sys_connect_by_path(ename, '=>'),  
        e.*  
   from emp e  
 connect by prior e.empno = e.mgr   
  start with e.mgr is null  
  order siblings by  e.ename;