Oracle 树操作(select…start with…connect by…prior)
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');