connect by 查出机构部门用户树

之前一直有这么一个问题总是觉得不能用sql直接解决:数据库里面存储了树形结构,并且每一层都按一个orderby字段排序,怎么使用一个sql直接查出树形结构从上到下的顺序呢?今天终于有时间研究了一下,下面把数据库结构和sql贴出来大家一起参考一下。

首先说说我们的数据结构:机构表sys_organization(id,parent_organ,organ_simple_name,orderby),部门表sys_department(id,parent_department,sys_organization,department_name,orderby)(因为部门是挂在机构下面的,对于上级部门即parent_department为空的那些部门则是直接挂在机构下面,而parent_department不为空的话则是挂在部门下面),用户表sysuser(id,sys_department,user_name,orderby)(对于用户则是直接挂在部门下面的)

 

select rs.*,level from (

select 'org'||org.id id,'org'||org.parent_organ pid,org.organ_simple_name showname,org.orderby orderby from sys_organization org where org.is_valid=1

union all

select 'dep'||dep.id id,'org'||dep.sys_organization pid,dep.department_name showname,dep.orderby orderby from sys_department dep where dep.is_valid=1 and dep.parent_department is null

union all

select 'dep'||dep.id id,'dep'||dep.parent_department pid,dep.department_name showname,dep.orderby orderby from sys_department dep where dep.is_valid=1 and dep.parent_department is not null

union all

select 'usr'||su.id id,'dep'||su.sys_department pid,su.user_name showname,su.orderby orderby from sysuser su where su.is_valid=1

)rs connect by rs.pid=prior rs.id start with rs.id='org1' order siblings by rs.orderby

这样就可以查出按机构部门用户构成树,同时内部使用orderby排序顺序的一个查询结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值