详解SQL中的递归问题
递归查询原理
SQL Server中的递归查询是通过CTE(表表达式)来实现。至少包含两个查询,个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
递归查询的终止条件
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。
递归查询的优点
效率高,大量数据集下,速度比程序的查询快。
递归的常见形式
WITH CTE AS (
SELECT column1,column2... FROM tablename WHERE conditions
UNION ALL
SELECT column1,column2... FROM tablename
INNER JOIN CTE ON conditions
)
递归查询示例
创建测试数据,有一个员工表Employee,ManagerID是UserID的父节点,这是一个非常简单的层次结构模型。
USE SQL_Road
GO
CREATE TABLE Employee
(
UserID INT,
ManagerID INT,
Name NVARCHAR(10)
)
INSERT INTO dbo.Employee
SELECT 1,-1,N'Boss'
UNION ALL
SELECT 11,1,N'A1'
UNION ALL
SELECT 12,1,N'A2'
UNION ALL
SELECT 13,1,N'A3'
UNION ALL
SELECT 111,11,N'B1'
UNION ALL
SELECT 112,11,N'B2'
UNION ALL
SELECT 121,12,N'C1'
相关文章