【997755.com澳门葡京】Oracle递归查询父子兄弟节点,数据表查询全数子

997755.com澳门葡京 1

Oracle递归查询父子兄弟节点,oracle递归

① 、查询某节点下拥有后代节点(包含各级父节点)

1 // 查询id为101的所有后代节点,包含101在内的各级父节点
2 select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id

② 、查询某节点下有所后代节点(不包蕴各级父节点)

1 select t.*
2   from SYS_ORG t
3  where not exists (select 1 from SYS_ORG s where s.parent_id = t.id)
4  start with id = '101'
5 connect by parent_id = prior id

三 、查询某节点有所父节点(全部祖宗节点) 

1 select t.*
2   from SYS_ORG t
3  start with id = '401000501'
4 connect by prior parent_id = id

④ 、查询某节点有所的男人节点(亲兄弟)

1 select * from SYS_ORG t
2 where exists (select * from SYS_ORG s where t.parent_id=s.parent_id and s.id='401000501')

⑤ 、查询某节点有所同级节点(族节点),假如不安装级别字段

1 with tmp as(
2       select t.*, level leaf        
3       from SYS_ORG t               
4       start with t.parent_id = '0'     
5       connect by t.parent_id = prior t.id)
6 select *                               
7       from tmp                             
8 where leaf = (select leaf from tmp where id = '401000501');

【997755.com澳门葡京】Oracle递归查询父子兄弟节点,数据表查询全数子。那里运用七个技巧,三个是应用了level来标识每种节点在表中的级别,还有正是利用with语法模拟出了一张带有级其余权且表

 六 、查询某节点的父节点及兄弟节点(二伯节点)

with tmp as(
    select t.*, level lev
    from SYS_ORG t
    start with t.parent_id = '0'
    connect by t.parent_id = prior t.id)  
select b.*
from tmp b,(select *
            from tmp
            where id = '401000501' and lev = '2') a
where b.lev = '1'

union all

select *
from tmp
where parent_id = (select distinct x.id
                from tmp x, --祖父
                     tmp y, --父亲
                     (select *
                      from tmp
                      where id = '401000501' and lev > '2') z --儿子
                where y.id = z.parent_id and x.id = y.parent_id); 

此间询问分成以下几步。
先是,将全表都施用一时半刻表加上级别;
说不上,依据级别来判定有几类别型,以上文中举的例证来说,有三种景况:
(1)当前节点为五星级节点,即查询出来的lev值为1,那么它从未上级节点,不予考虑。
(2)当前节点为2级节点,查询出来的lev值为2,那么就要是保险lev级别为1的正是其上司节点的男士节点。
(3)其它景况便是3以及上述级别,那么就要选查询出来其顶头上司的顶头上司节点(祖父),再来判断祖父的下级节点都以属于该节点的上级节点的弟兄节点。
终极,正是运用union将查询出来的结果开始展览组合起来,形成结果集。

一 、查询某节点下全部后代节点(包涵各级父节点) 1 //
查询id为101的具有后代节点,包罗101在内的各…

壹 、查询某节点下全部后代节点(包含各级父节点)

一 、查询某节点下具有后代节点(包含各级父节点)

查询全部子节点

1 // 查询id为101的所有后代节点,包含101在内的各级父节点
2 select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id
1 // 查询id为101的所有后代节点,包含101在内的各级父节点
2 select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id
with Select_child(id,parentId,value,level)
as(
   select id,parentid,value,0 as level from ctable where parentid=2
   union all
   select c.id,c.parentid,c.value,sc.level+1 from ctable c
   inner join Select_child sc on c.parentId=sc.id 
)

select * from Select_child;

贰 、查询某节点下具有后代节点(不分包各级父节点)

贰 、查询某节点下全部后代节点(不含有各级父节点)

 查询全部父节点调换颜色部分

1 select t.*
2   from SYS_ORG t
3  where not exists (select 1 from SYS_ORG s where s.parent_id = t.id)
4  start with id = '101'
5 connect by parent_id = prior id
1 select t.*
2   from SYS_ORG t
3  where not exists (select 1 from SYS_ORG s where s.parent_id = t.id)
4  start with id = '101'
5 connect by parent_id = prior id

③ 、查询某节点有所父节点(全数祖宗节点) 

③ 、查询某节点有所父节点(全体祖宗节点) 

1 select t.*
2   from SYS_ORG t
3  start with id = '401000501'
4 connect by prior parent_id = id
1 select t.*
2   from SYS_ORG t
3  start with id = '401000501'
4 connect by prior parent_id = id

四 、查询某节点有所的兄弟节点(亲兄弟)

④ 、查询某节点有所的匹夫节点(亲兄弟)

1 select * from SYS_ORG t
2 where exists (select * from SYS_ORG s where t.parent_id=s.parent_id and s.id='401000501')
1 select * from SYS_ORG t
2 where exists (select * from SYS_ORG s where t.parent_id=s.parent_id and s.id='401000501')

伍 、查询某节点有所同级节点(族节点),假使不设置级别字段

伍 、查询某节点有所同级节点(族节点),假诺不安装级别字段

1 with tmp as(
2       select t.*, level leaf        
3       from SYS_ORG t               
4       start with t.parent_id = '0'     
5       connect by t.parent_id = prior t.id)
6 select *                               
7       from tmp                             
8 where leaf = (select leaf from tmp where id = '401000501');
1 with tmp as(
2       select t.*, level leaf        
3       from SYS_ORG t               
4       start with t.parent_id = '0'     
5       connect by t.parent_id = prior t.id)
6 select *                               
7       from tmp                             
8 where leaf = (select leaf from tmp where id = '401000501');

此间运用多少个技术,3个是行使了level来标识每种节点在表中的级别,还有就是采用with语法模拟出了一张带有级其余近日表

此处运用五个技术,一个是运用了level来标识每一种节点在表中的级别,还有正是行使with语法模拟出了一张带有级其余一时表

 ⑥ 、查询某节点的父节点及兄弟节点(公公节点)

 陆 、查询某节点的父节点及兄弟节点(四叔节点)

with tmp as(
    select t.*, level lev
    from SYS_ORG t
    start with t.parent_id = '0'
    connect by t.parent_id = prior t.id)  
select b.*
from tmp b,(select *
            from tmp
            where id = '401000501' and lev = '2') a
where b.lev = '1'

union all

select *
from tmp
where parent_id = (select distinct x.id
                from tmp x, --祖父
                     tmp y, --父亲
                     (select *
                      from tmp
                      where id = '401000501' and lev > '2') z --儿子
                where y.id = z.parent_id and x.id = y.parent_id); 
with tmp as(
    select t.*, level lev
    from SYS_ORG t
    start with t.parent_id = '0'
    connect by t.parent_id = prior t.id)  
select b.*
from tmp b,(select *
            from tmp
            where id = '401000501' and lev = '2') a
where b.lev = '1'

union all

select *
from tmp
where parent_id = (select distinct x.id
                from tmp x, --祖父
                     tmp y, --父亲
                     (select *
                      from tmp
                      where id = '401000501' and lev > '2') z --儿子
                where y.id = z.parent_id and x.id = y.parent_id); 

那里询问分成以下几步。
率先,将全表都采纳目前表加上级别;
其次,依据级别来判断有三种档次,以上文中举的事例来说,有三种状态:
(1)当前节点为一级节点,即查询出来的lev值为1,那么它从未上级节点,不予考虑。
(2)当前节点为2级节点,查询出来的lev值为2,那么就倘使保险lev级别为1的正是其上级节点的汉子节点。
(3)别的意况正是3以及上述级别,那么就要选查询出来其上边的上边节点(祖父),再来判断祖父的上边节点都是属于该节点的上级节点的弟兄节点。
最终,就是应用union将查询出来的结果进行结合起来,形成结果集。

此间询问分成以下几步。
率先,将全表都应用暂时表加上级别;
其次,依据级别来判定有二种档次,以上文中举的例证来说,有二种景况:
(1)当前节点为一品节点,即查询出来的lev值为1,那么它从未上边节点,不予考虑。
997755.com澳门葡京 ,(2)当前节点为2级节点,查询出来的lev值为2,那么就若是有限支撑lev级别为1的正是其上级节点的弟兄节点。
(3)此外情状就是3以及上述级别,那么就要选查询出来其上边的顶头上司节点(祖父),再来判断祖父的下属节点都以属于该节点的上级节点的男子儿节点。
说到底,就是采用union将查询出来的结果开始展览组合起来,形成结果集。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website