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

      系统用到的组织机构树,要实现对当前节点以及其子节点的查询,数据库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