首先我们要知道 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