| 这里查询分成以下几步。首先,将第7个一样,将全表都使用临时表加上级别;
 其次,根据级别来判断有几种类型,以上文中举的例子来说,有三种情况:
 (1)当前节点为顶级节点,即查询出来的lev值为1,那么它没有上级节点,不予考虑。
 (2)当前节点为2级节点,查询出来的lev值为2,那么就只要保证lev级别为1的就是其上级节点的兄弟节点。
 (3)其它情况就是3以及以上级别,那么就要选查询出来其上级的上级节点(祖父),再来判断祖父的下级节点都是属于该节点的上级节点的兄弟节点。
 最后,就是使用union将查询出来的结果进行结合起来,形成结果集。
 9)、查询一个节点的父节点的同级节点(族叔)。这个其实跟第7种情况是相同的。
 | 
 
       
         1 
        
       
         2 
        
       
         3 
        
       
         4 
        
       
         5 
        
       
         6 
        
       
         7 
        
       
         8 
         
       
        
         
         with tmp as( 
         
         
         ?????? 
         select a.*,level leaf???????  
         
         
         ?????? 
         from tb_menu a???????????????  
         
         
         ?????? 
         start with a.parent is  
         null????? 
         
         
         ?????? 
         connect by a.parent = prior a.id) 
         
         
         select *??????????????????????????????  
         
         
         from tmp????????????????????????????  
         
         
         where leaf = (select leaf from tmp where id =  
         6 
         ) -  
         1 
         ; 
         
         
     
 
  
 基本上,常见的查询在里面了,不常见的也有部分了。其中,查询的内容都是节点的基本信息,都是数据表中的基本字段,但是在树查询中还有些特殊需求,是对查询数据进行了处理的,常见的包括列出树路径等。
 
 补充一个概念,对于数据库来说,根节点并不一定是在数据库中设计的顶级节点,对于数据库来说,根节点就是start with开始的地方。
 
 下面列出的是一些与树相关的特殊需求。
 
 10)、名称要列出名称全部路径。
这里常见的有两种情况,一种是从顶级列出,直到当前节点的名称(或者其它属性);一种是从当前节点列出,直到顶级节点的名称(或其它属性)。举地址为例:国内的习惯是从省开始、到市、到县、到居委会的,而国外的习惯正好相反(老师说的,还没接过国外的邮件,谁能寄个瞅瞅? )。
从顶部开始:
 
  
   
   
 
       
         1 
        
       
         2 
        
       
         3 
        
       
         4 
        
       
         5 
         
       
        
         
         select sys_connect_by_path (title, 
         ‘/‘ 
         ) 
         
         
         from tb_menu 
         
         
         where id =  
         50 
         
         
         start with parent is  
         null 
         
         
         connect by parent = prior id; 
         
         
                             (编辑:源码网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!