樹結構表遞迴查詢在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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-594979/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 樹結構表遞迴查詢在ORACLE和MSSQL中的實現方法 [續]遞迴OracleSQL
- Java實現遞迴查詢樹結構Java遞迴
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- Mysql 實現樹狀遞迴查詢MySql遞迴
- oracle之樹狀結構的儲存與展示(遞迴查詢)Oracle遞迴
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 不用遞迴實現樹形結構的一種方法遞迴
- 【資料結構】——搜尋二叉樹的插入,查詢和刪除(遞迴&非遞迴)資料結構二叉樹遞迴
- ORACLE遞迴查詢(適用於ID,PARENTID結構資料表)Oracle遞迴
- ORACLE 遞迴查詢Oracle遞迴
- JS遞迴過濾樹形結構陣列物件--模糊查詢JS遞迴陣列物件
- Oracle SQL的遞迴查詢OracleSQL遞迴
- Vue遞迴元件實現樹形結構選單Vue遞迴元件
- 遞迴遍歷樹狀結構優雅實現遞迴
- 通用-遞迴樹結構遞迴
- Oracle遞迴查詢sqlOracle遞迴SQL
- MSSQL資料庫映象在Oracle中的實現方法SQL資料庫Oracle
- python 遞迴樹狀結構 和 排序Python遞迴排序
- 遞迴樹形查詢所有分類遞迴
- PHP 樹-不需要遞迴的實現方法PHP遞迴
- MySQL遞迴查詢樹狀表的子節點、父節點MySql遞迴
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- Oracle 樹形結構查詢的特殊用法Oracle
- Sql Server 使用CTE實現遞迴查詢SQLServer遞迴
- 解析MSSQL跨資料庫查詢的實現方法SQL資料庫
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 使用SQL SERVER 2005/2008 遞迴CTE查詢樹型結構SQLServer遞迴
- 【演算法拾遺】二分查詢遞迴非遞迴實現演算法遞迴
- BST查詢結構與折半查詢方法的實現與實驗比較
- PostgreSQL 遞迴查詢SQL遞迴
- PostgreSQL=>遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- 二分法查詢(遞迴實現)遞迴
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴