ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 树结构表递归查询在ORACLE和MSSQL中的实现方法

树结构表递归查询在ORACLE和MSSQL中的实现方法

原创 Linux操作系统 作者:iSQlServer 时间:2009-05-13 15:43:15 0 删除 编辑
树结构表:记录树形数据的二维数据表,包含"本节点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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-594979/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2079916