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遞迴查詢SQLServer遞迴
- 使用SQL SERVER 2005/2008 遞迴CTE查詢樹型結構SQLServer遞迴
- MS SQL Server的遞迴查詢SQLServer遞迴
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- MS SQL Server的遞迴查詢(2)SQLServer遞迴
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- SQL Server中CTE的另一種遞迴方式-從底層向上遞迴SQLServer遞迴
- Oracle遞迴查詢sqlOracle遞迴SQL
- sql無限遞迴查詢SQL遞迴
- sql遞迴查詢子級SQL遞迴
- Oracle SQL的遞迴查詢OracleSQL遞迴
- SQL2005/2008中的CTE應用--遞迴查詢SQL遞迴
- Mysql 實現樹狀遞迴查詢MySql遞迴
- MYSQL: 表表示式(CTE)實現遞迴例項MySql遞迴
- sql server遞迴SQLServer遞迴
- SQL Server 2005資料庫中表的遞迴查詢SQLServer資料庫遞迴
- Java實現遞迴查詢樹結構Java遞迴
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 【演算法拾遺】二分查詢遞迴非遞迴實現演算法遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- PostgreSQL=>遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- ORACLE 遞迴查詢Oracle遞迴
- 二分法查詢(遞迴實現)遞迴
- SQL Server將直接傳遞查詢作為表使用的方法SQLServer
- SQL with as 的用法 以及遞迴函式的寫法 遞迴層次查詢SQL遞迴函式
- 一個遞迴查詢遞迴
- 使用SQL實現特殊查詢(1)SQL
- grep遞迴查詢子目錄遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- SQL Server 查詢分解SQLServer
- java-遞迴(檔案查詢)Java遞迴
- sql 函式實現三種父子遞迴SQL函式遞迴
- SQL SERVER 查詢鎖資訊SQLServer
- SQL server跨庫查詢SQLServer