日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【SQLSERVER】递归查询算法实例

發布時間:2023/12/15 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 【SQLSERVER】递归查询算法实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、遞歸查詢

1.結構:遞歸CTE最少包含兩個查詢(也被稱為成員)。

第一個查詢為定點成員,定點成員只是一個返回有效表的查詢,用于遞歸的基礎或定位點。

第二個查詢被稱為遞歸成員,使該查詢稱為遞歸成員的是對CTE名稱的遞歸引用是觸發。在邏輯上可以將CTE名稱的內部應用理解為前一個查詢的結果集。

2.遞歸結束條件:

第二個遞歸查詢返回空結果集或是超出了遞歸次數的最大限制時才停止遞歸。

3.Sql遞歸的優點:

效率高,大量數據集下,速度比程序的查詢快。

4.遞歸查詢的作用:

用來查詢指定成員及其遞歸成員(下屬所有成員,包括下屬的下屬)

5.適用場景:

成員權限查詢、等級區域查詢,其他相關類似查詢。

二、實例

數據準備:  

/*
test表
ID        地區ID
Name      地區名稱 
Main_ID   地區所屬上級ID
Sign      地區等級 例如:福建-廈門-湖里 分別是 1,2,3
*/
SELECT     1003    ID,    '福建'    Name,    0    Main_ID,    1 Sign INTO test    union all
SELECT     1050    ,    '福州'    ,    1003    ,    2    union all
SELECT     1051    ,    '廈門'    ,    1003    ,    2    union ALL
SELECT     1375    ,    '思明'    ,    1051    ,    3    union all
SELECT     1382    ,    '海滄'    ,    1051    ,    3    union all
SELECT     1381    ,    '湖里'    ,    1051    ,    3    union all
SELECT     1374    ,    '集美'    ,    1051    ,    3    union all
SELECT     1373    ,    '同安'    ,    1051    ,    3    union all
SELECT     1380    ,    '翔安'    ,    1051    ,    3    union ALL
SELECT     667582720122    ,    '鼓樓'    ,    1050    ,    3    union all
SELECT     667582725528    ,    '臺江'    ,    1050    ,    3    union all
SELECT     667582729587    ,    '倉山'    ,    1050    ,    3    union all
SELECT     667582732602    ,    '馬尾'    ,    1050    ,    3    union all
SELECT     667582735385    ,    '晉安'    ,    1050    ,    3    union all
SELECT     667582738507    ,    '閩侯'    ,    1050    ,    3    union all
SELECT     667582742586    ,    '連江'    ,    1050    ,    3    union all
SELECT     667582745634    ,    '羅源'    ,    1050    ,    3    union all
SELECT     667582748358    ,    '閩清'    ,    1050    ,    3    union all
SELECT     667582751824    ,    '永泰'    ,    1050    ,    3    union all
SELECT     667582755215    ,    '平潭'    ,    1050    ,    3    union all
SELECT     667582760309    ,    '福清'    ,    1050    ,    3    union all
SELECT     667582764565    ,    '長樂'    ,    1050    ,    3

實例:

/*
查詢:福建省(ID 1003)及其底下的所有地區
*/
WITH CTE AS 
(
--父項
SELECT ID,Main_ID 
FROM test WHERE ID=1003
UNION ALL 
--遞歸結果集中的下級 
SELECT a.ID,a.Main_ID 
FROM test a
INNER JOIN CTE b ON b.ID=a.Main_ID
)

SELECT a.* 
FROM Test a
INNER JOIN CTE t ON a.ID=t.ID

查詢結果:

總結

以上是生活随笔為你收集整理的【SQLSERVER】递归查询算法实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。