zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    Go语言基础介绍
    webpack教程——css的加载
    Git忽略规则.gitignore梳理
    vue2.0路由-适合刚接触新手简单理解
    JAVA实现DES加密实现详解
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    Storm:最火的流式处理框架
    神片和神回复
    论C#未来发展
    弄清UTF8和Unicode
  • 原文地址:https://www.cnblogs.com/embraceU/p/9235326.html
Copyright © 2011-2022 走看看