oracle 递归查询出部门与人员关系

本文介绍了如何使用Oracle的start with...connect by子句进行递归查询,以解决查询特定公司下所有部门及人员的问题。由于一开始对Oracle不熟悉,作者曾用Java循环实现,但这种方式效率较低。最终,通过优化的SQL查询,一次性获取所需数据,包括部门和人员,避免了多次数据库请求,提高了查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们要知道 oracle数据库中是有递归查询的Sql可以参考一下http://www.cnblogs.com/yingsong/p/5035907.html

Oracle中start with…connect by prior子句用法
connect by 是结构化查询中用到的,其基本语法是:
select … from tablename

start with 条件1
connect by 条件2
where 条件3

比如:查询的是部门为'217CMHK'下的所有子部门

select * from orrela o start with o.reorgid = '217CMHK' and o.stat = 'STAR' connect by o.reorgid = prior o.orgid

我当时在做这个时候,我对oracle不熟悉所以我是直接在java中用循环写的,这样导致请求数据库的次数增多,在性能方面来说是消耗比较大的,查询速度也比较慢

业务要求

查询在某个顶级公司下的所有部门以及子部门,子部门下的所有人员,如果部门没有人则不返回数据.并拼接返回

实现方式

通过sql一次性查出所有数据,包括子部门与人员

----递归查询部门关系与人员
SELECT * FROM (SELECT T.*,'-' as empName, '-' as empid,'-' as login FROM T_BO_ORRELA T 
START WITH T.ORGID in (SELECT ORGID FROM (
   	SELECT O.ORGID FROM T_BO_ORMEMBER O,T_BO_ORGAN G  WHERE O.ORGID = G.ORGID  AND O.STAT = 'STAR' ORDER BY G.AU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值