Sql Server 使用CTE實現遞迴查詢
遞迴CTE是SQL SERVER 2005中重要的增強之一。一般我們在處理樹,圖和層次結構的問題時需要用到遞迴查詢。
CTE的語法如下
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 WITH CTE AS
2 (
3 SELECT EmpId, ReportTo, FName FROM Employ WHERE EmpId=1
4 UNION ALL
5 SELECT emp.EmpId, emp.ReportTo, emp.FName FROM CTE JOIN Employ as emp ON CTE.EmpId=emp.ReportTo
6 )
2 (
3 SELECT EmpId, ReportTo, FName FROM Employ WHERE EmpId=1
4 UNION ALL
5 SELECT emp.EmpId, emp.ReportTo, emp.FName FROM CTE JOIN Employ as emp ON CTE.EmpId=emp.ReportTo
6 )
遞迴CTE最少包含兩個查詢(也被稱為成員)。第一個查詢為定點成員,定點成員只是一個返回有效表的查詢,用於遞迴的基礎或定位點。第二個查詢被稱為遞迴成員,使該查詢稱為遞迴成員的是對CTE名稱的遞迴引用是觸發。在邏輯上可以將CTE名稱的內部應用理解為前一個查詢的結果集。
遞迴查詢沒有顯式的遞迴終止條件,只有當第二個遞迴查詢返回空結果集或是超出了遞迴次數的最大限制時才停止遞迴。是指遞迴次數上限的方法是使用MAXRECURION。
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 USE AdventureWorks;
2 GO
3 --Creates an infinite loop
4 WITH cte (EmployeeID, ManagerID, Title) as
5 (
6 SELECT EmployeeID, ManagerID, Title
7 FROM HumanResources.Employee
8 WHERE ManagerID IS NOT NULL
9 UNION ALL
10 SELECT cte.EmployeeID, cte.ManagerID, cte.Title
11 FROM cte
12 JOIN HumanResources.Employee AS e
13 ON cte.ManagerID = e.EmployeeID
14 )
15 --Uses MAXRECURSION to limit the recursive levels to 2
16 SELECT EmployeeID, ManagerID, Title
17 FROM cte
18 OPTION (MAXRECURSION 2);
19 GO
2 GO
3 --Creates an infinite loop
4 WITH cte (EmployeeID, ManagerID, Title) as
5 (
6 SELECT EmployeeID, ManagerID, Title
7 FROM HumanResources.Employee
8 WHERE ManagerID IS NOT NULL
9 UNION ALL
10 SELECT cte.EmployeeID, cte.ManagerID, cte.Title
11 FROM cte
12 JOIN HumanResources.Employee AS e
13 ON cte.ManagerID = e.EmployeeID
14 )
15 --Uses MAXRECURSION to limit the recursive levels to 2
16 SELECT EmployeeID, ManagerID, Title
17 FROM cte
18 OPTION (MAXRECURSION 2);
19 GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-624449/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server2005使用CTE實現遞迴QCSQLServer遞迴
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- sql server遞迴SQLServer遞迴
- MYSQL: 表表示式(CTE)實現遞迴例項MySql遞迴
- Java實現遞迴查詢樹結構Java遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- 二分法查詢(遞迴實現)遞迴
- 遞迴查詢子元素遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- sql-server高階查詢SQLServer
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- java-遞迴(檔案查詢)Java遞迴
- SQL Server 跨資料庫查詢SQLServer資料庫
- sql-server不相關子查詢SQLServer
- sql-server相關子查詢SQLServer
- Sql Server 的引數化查詢SQLServer
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫
- 遞迴樹形查詢所有分類遞迴
- 遞迴-M--二分查詢遞迴
- [SQL Server玩轉Python] 二.T-SQL查詢表格值及Python實現資料分析SQLServerPython
- SQL Server 語句日期格式查詢方法SQLServer
- SQL Server 查詢超時問題排查SQLServer
- SQL Server查詢慢的解決方案SQLServer
- SQL Server-簡單查詢語句SQLServer
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- SQL Server 查詢歷史執行的SQL語句SQLServer
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 資料庫遞迴查詢:MySQL VS Sequelize資料庫遞迴MySql
- 透過遞迴查詢應用依賴遞迴
- 棧實現遞迴遞迴
- lambda實現遞迴遞迴
- SQL 遞迴思想SQL遞迴
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- SQL Server 查詢表註釋和欄位SQLServer
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴