Oracle 树操作(select…start with…connect by…prior)

--查找一个节点所有直属父节点(直到祖先),eg:找到一个节点(儿子)-父亲-祖父-...-祖先

select * from T_DEPARTMENT m start with m.id='71ee6f3ad2844c72a5dc6ffe3dd936d9' connect by prior m.parentid=m.id;

查询结果:


展示方式


--查找一个节点(儿子)直属父节点(父亲),eg:找到一个节点(儿子)-父亲

select  p.* from T_DEPARTMENT c, T_DEPARTMENT p where c.parentid=p.id and c.id='71ee6f3ad2844c72a5dc6ffe3dd936d9';

查询结果:


展示方式


--查找一个节点的所有直属子节点(所有后代)

select * from T_DEPARTMENT m start with m.id='b827f741ed444b1a971d1c67fa1b5ee8' connect by m.parentid=prior m.id;

查询结果:


展示方式


--查询一个节点的兄弟节点(亲兄弟,即同一个父亲)
select * from T_DEPARTMENT m where exists (select * from T_DEPARTMENT m2 where m.parentid=m2.parentid and m2.id='71ee6f3ad2844c72a5dc6ffe3dd936d9');
--查询与一个节点同级的节点(族兄弟)。 如果在表中设置了级别的字段,那么在做这类查询时会很轻松,
--同一级别的就是与那个节点同级的,在这里列出不使用该字段时的实现

    with tmp as(  select a.id,a.departmentname,a.parentid,a.path,a.sort ,a.series,level leaf        
      from T_DEPARTMENT a                
      start with a.parentid is null     
      connect by a.parentid = prior a.id)
select *                               
from tmp                             
where leaf = (select leaf from tmp where id ='b827f741ed444b1a971d1c67fa1b5ee8');

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值