Orcale查询:组织机构树形结构递归查询实战

题目

机构号上级机构号机构层级
00001
0010002
1010013
1020013
0020002
2010023
2020023
2030023
3112014
3122014
4212024
4222024
.........

请查询出002机构下的所有层级机构。

请查询出511机构上的所有层级机构。

建表语句

-- 建表
create table jg(
orgid varchar2(20),
porgid varchar2(20)
);

--插入数据
insert into jg values('201','002');
insert into jg values('202','002');
insert into jg values('203','002');
insert into jg values('311','201');
insert into jg values('312','201');
insert into jg values('421','202');
insert into jg values('422','202');
insert into jg values('511','203');
insert into jg values('612','511');
insert into jg values('101','001');
insert into jg values('102','001');
insert into jg values('002','000');
commit;

查询出 002 机构下的所有层级机构

思路:

  1. 初始查询:找到所有 PORGID = '002' 的记录(即直接下级)。

  2. 递归查询:将每次找到的下级机构作为新的 PORGID,继续查找它们的下级。

  3. 终止条件:当没有更多下级时停止。

图片分析

最终代码

with t1(orgid,porgid)as (
  select orgid,porgid from jg where porgid = 002
    union all
select
    shangji.orgid,
          shangji.porgid
 from t1 yuangong
  join jg shangji on shangji.porgid = yuangong.orgid

)
select * from t1;

查询出 511 机构上的所有层级机构

思路:

  1. 初始查询:找到 ORGID = '511' 的记录。

  2. 递归查询:将每次找到的 PORGID 作为新的 ORGID,继续查找其上级。

  3. 终止条件:当 PORGID 为根节点(如 000)或没有上级时停止。

图片分析

最终代码

with t1(orgid,porgid)as (
  select orgid,porgid from jg where orgid = 511
    union all
select
    shangji.orgid,
          shangji.porgid
 from jg shangji
  join t1 yuangong on shangji.orgid = yuangong.porgid
)
select *
from t1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值