zoukankan      html  css  js  c++  java
  • [转]树结构表递归查询在ORACLE和MSSQL中的实现方法

    树结构表:记录树形数据的二维数据表,包含"本节点ID”和"父节点ID"
    经常需要进行递归查询某个节点下的所有节点数据
    以下是分别在ORACLE和MSSQL中的实现

    如本例子中涉及的表
    TB_SM_ORGAN(
        ORG_ID int,
        ORG_CODE varchar(20),
        ORG_NAME varchar(40),
        IS_INITDATA char(1),
        ORG_PARENTID int,
        ORG_TYPEID varchar(6),
        ORG_AGENTID int,
        ORG_STATUS char(3),
        ORG_DESC varchar(200))

    【ORACLE】
    直接支持,使用SELECT * WHERE ..... START WITH ..... CONNECT BY 本节点ID=父节点ID
    例如:
    SELECT * FROM TB_SM_ORGAN where Org_Status = 'S0A' START WITH ORG_ID= @OrgId CONNECT BY PRIOR ORG_ID = ORG_PARENTID order by ORG_CODE

    【MSSQL】
    没有增强型SQL实现,需要使用临时表和循环多次查询的方式实现
    create function GetOrganSubTreeByOrganID (@id int)
    returns @t table(
        ORG_ID int,
        ORG_CODE varchar(20),
        ORG_NAME varchar(40),
        IS_INITDATA char(1),
        ORG_PARENTID int,
        ORG_TYPEID varchar(6),
        ORG_AGENTID int,
        ORG_STATUS char(3),
        ORG_DESC varchar(200))
    as
    begin
        insert @t select * from TB_SM_ORGAN where org_id = @id
        while @@rowcount > 0
            insert @t select a.* from TB_SM_ORGAN as a inner join @t as b
            on a.org_parentid = b.org_id and a.org_id not in(select org_id from @t)
       return
    end
    使用方法

    SELECT * FROM GetOrganSubTreeByOrganID (ID);

     出处: http://www.cnblogs.com/sunnyflat/articles/1173239.html

  • 相关阅读:
    input 框变成不可编辑的。
    git 首次往远程仓库提交项目过程。(使用idea操作)
    nacos 导入项目配置(yml文件)步骤
    instr MySQL数据库函数用法
    遍历 map 的方法
    基于分布式思想下的rpc解决方案(1)
    深入理解通信协议-(1)
    Tomcat(3)--性能优化
    并发编程(5)--并发容器
    并发编程(4)--显示锁和AQS
  • 原文地址:https://www.cnblogs.com/feinian/p/1446804.html
Copyright © 2011-2022 走看看