[转]树结构表递归查询在ORACLE和MSSQL中的实现方法
生活随笔
收集整理的這篇文章主要介紹了
[转]树结构表递归查询在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
使用方法
經常需要進行遞歸查詢某個節點下的所有節點數據
以下是分別在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
轉載于:https://www.cnblogs.com/feinian/archive/2009/04/30/1446804.html
總結
以上是生活随笔為你收集整理的[转]树结构表递归查询在ORACLE和MSSQL中的实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ss.exe 命令参数应用
- 下一篇: 更新中