SQL递归查询实现组织机构树

本文介绍如何使用SQL递归查询实现组织机构树的构建,包括查询所有节点及特定层级父节点的方法,并提供具体实例。

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

      系统用到的组织机构树,要实现对当前节点以及其子节点的查询,数据库SQL要用到递归查询,这也是我第一次接触SQL的递归查询。

      先说一下什么是递归查询,简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:code,parent_code,那么通过表示每一条记录的parent是谁,就可以形成一个树状结构,用上述语法的查询可以取得这棵树的所有记录,其中:

条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR code = parent_code;就是说上一条记录的code 是本条记录的parent_code,即本记录的父亲是上一条记录。

条件3 是过滤条件,用于对返回的所有记录进行过滤。

select  <检索列>
  	from  <table> where <condition> 
 	START WITH  <root>
CONNECT BY <connect condition>
 	order by <sort>

【组织机构树】

select a.name, a.types, a.code, a.parent_code
  	from ORGANIZATION a
 	START WITH a.code = '1'
CONNECT BY PRIOR a.code = a.parent_code
 	order by a.sort ASC
     这样可以查出所要信息,还可以一次性查出来一个clob结果集;

select wm_concat(code)
  	from ORGANIZATION a
 	START WITH a.code = '1'
CONNECT BY PRIOR a.code = a.parent_code
 	order by a.sort ASC

个人认为,这样的结果集比较方便后台处理,不用将其分开,用 in 就可以,顺便说一下,树的插件是用的ztree。

【查询根节点或某层父节点】

因为项目的业务中,要做组织机构树,用到的时候会根据登陆用户权限显示不同层级,或者业务流程中需要用到某一层级的父节点或者根节点,当只有某个叶子节点或者子节点时,可以反向递归出父节点到根节点的所有节点。

select wm_concat(code)
  	from ORGANIZATION a
 	START WITH a.parent_code = '1'
CONNECT BY a.code = PRIOR a.parent_code
 	order by a.sort ASC



转载于:https://www.cnblogs.com/embraceU/p/9235326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值