SQLServer樹查詢
阿新 • • 發佈:2017-07-08
遍歷 例子 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樹查詢