1. 程式人生 > >SQLServer樹查詢

SQLServer樹查詢

遍歷 例子 ren 依次 attach c-s sqlserve 輸出 mar

感覺這個CTE遞歸查詢蠻好用的,先舉個例子:

上面的SQL語句再次插入一條數據:

insert Tree values(‘網絡1班‘,‘網絡工程‘)

運行結果如下圖:

技術分享

圖1 運行結果

註意點:貌似在遞歸成員處所選擇的字段都必須Tree表的數據,而不能是CTE結果集中的除了Tree中沒有而CTE中有的字段在這裏才可以引用,比如字段TE。

首先看下,遍歷的第1條記錄的SQL語句:

獲取的結果為:

Name Parent TE Levle

-------------------------------------

大學 NULL 大學 0

遞歸第2次所獲取的結果集合的類SQL語句為:

上面的CTE子查詢的結果就是第一次遞歸查詢的結果集,上面SQL運行結果為:

技術分享

同樣的,將第二次遞歸查詢的上面三條記錄作為第三次查詢的‘定位成員’:

【這裏要註意,上面的三條記錄是從最後一條開始依次作為第三次遞歸的輸入的,即第一條是ID=9的記錄,接下來是7和2,關於第四次遞歸也類似】

第三次遞歸類SQL語句

結果如下:

技術分享

其實每次遞歸的類SQL可為如下所示:

第四次遞歸一次類推,最後所查詢的結果為上面所有遞歸的union。

續:在上面的SQ語句查詢結果中,ID為10的記錄應該要放在ID為4的後面。

往數據表中再次添加兩條記錄:

insert Tree values(‘計科‘,‘計算機學院‘)
insert Tree values(‘我‘,‘網絡1班‘)

再次修改上面的SQL語句:

最後的結果為:

技術分享

圖2 運行結果

這樣,無論用戶插入多少條記錄都可以進行按部門,按規律進行查詢。

SQLServer樹查詢