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



  • 相关阅读:
    只有标题1没有标题2、3的解决方法
    python函数学习总结
    python基础知识学习总结
    StructuredStreaming中,如果trigger触发时前一批数据还没处理完怎么办?
    StructuredStreaming解析JSON CVS
    StructuredStreaming整合kafka
    kafka--如何选择Kafka的分区数和消费者个数
    kafka中groupid作用
    查看kafka版本
    spark项目java与scala相互调用打包
  • 原文地址:https://www.cnblogs.com/embraceU/p/9235326.html
Copyright © 2011-2022 走看看