樹結構表遞迴查詢在ORACLE和MSSQL中的實現方法 [續]
上文中MSSQL的資料是給定頂級物件,獲取頂級下面的所有樹,'
根據上面的寫法,我改出來根據樹枝列出根
ALTER function [dbo].[GetProjectTreeByProjectID1] (@id [uniqueidentifier])
returns @t table(
[Guid] [uniqueidentifier],
[ProjectName] [varchar](50),
[Remark] [varchar](100),
[ParentProject] [uniqueidentifier],
[Depth] [int])
as
begin
insert into @t select * from BI_Project where guid = @id
while @@rowcount > 0
insert @t
select a.*
from @t as b inner join BI_Project as a on b.parentproject = a.guid and a.guid not in(select guid from @t)
return
end
本人最T-SQL並不是很在行,故在此解釋一下以備以後忘記時回憶, 如有錯誤懇請指正:
1.ALTER function [dbo].[GetProjectTreeByProjectID1] (@id [uniqueidentifier]) --function 說明是一個MSSQL 方法
returns @t table( ---此處說明,此function返回的是一個下述表結構的一個表
[Guid] [uniqueidentifier],
[ProjectName] [varchar](50),
[Remark] [varchar](100),
[ParentProject] [uniqueidentifier],
[Depth] [int])
2. insert into @t select * from BI_Project where guid = @id
先將當前物件插入到要返回的物件表@t中.
3. 此部分是關鍵部分,分解開來說明:
while @@rowcount > 0
insert @t
select a.*
from @t as b inner join BI_Project as a on b.parentproject = a.guid and a.guid not in(select guid from @t)
3.1 @@rowcount --應該是MSSQL 內建變數,我們每次執行完SQL之後,MSSQL會自動設定@@rowcount的值為當前執行的結果的行數.
3.2 from @t as b inner join BI_Project --將我們[當前:說明這個零時表中的資料實動態變化的]的零時表@t(也是執行完要返回的表哦)與原表[BI_Project]連線;
3.3 條件說明: on b.parentproject = a.guid and a.guid not in(select guid from @t) --B的parentproject與A.主鍵連線,並且A中排除已存在在B中的記錄.
3.4 Q: a.guid not in(select guid from @t) 這句可以寫具體的值嗎?
A: 不可以, 因為@t表中的記錄是動態增加的,如果寫靜態的值,這個迴圈就會變成一個死迴圈.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-594980/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java實現遞迴查詢樹結構Java遞迴
- oracle之樹狀結構的儲存與展示(遞迴查詢)Oracle遞迴
- ORACLE遞迴查詢(適用於ID,PARENTID結構資料表)Oracle遞迴
- JS遞迴過濾樹形結構陣列物件--模糊查詢JS遞迴陣列物件
- Vue遞迴元件實現樹形結構選單Vue遞迴元件
- 遞迴遍歷樹狀結構優雅實現遞迴
- python 遞迴樹狀結構 和 排序Python遞迴排序
- 通用-遞迴樹結構遞迴
- 解析MSSQL跨資料庫查詢的實現方法SQL資料庫
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- 遞迴樹形查詢所有分類遞迴
- PHP 樹-不需要遞迴的實現方法PHP遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- BST查詢結構與折半查詢方法的實現與實驗比較
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 查詢最佳化——查詢樹結構
- 樹形結構的選單表設計與查詢
- 二分法查詢(遞迴實現)遞迴
- SqlServer遞迴查詢SQLServer遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- Oracle:優化方法總結(關於連表查詢)Oracle優化
- 遞迴查詢子元素遞迴
- NKMySQL 查詢樹結構方式gllMySql
- oracle樹形查詢Oracle
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- js樹型結構資料簡易遞迴JS遞迴
- ORACLE結構化查詢語句Oracle
- MySQL實現樹狀所有子節點查詢的方法MySql
- Oracle和Mysql遞迴OracleMySql遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- MySQL 查詢結果取交集的實現方法MySql
- 全域性元件實現遞迴樹,避免迴圈引用元件遞迴
- 關於樹結構的查詢優化,及許可權樹的查詢優化優化
- 【資料結構】查詢結構(二叉排序樹、ALV樹、雜湊技術雜湊表)資料結構排序