假设您正在使用 SQL Server
看看下面的例子
DECLARE @EmployeeStructure TABLE(
ID INT,
Name VARCHAR(MAX),
ManagerID INT
)
INSERT INTO @EmployeeStructure SELECT 1, 'a', NULL
INSERT INTO @EmployeeStructure SELECT 2, 'b', 1
INSERT INTO @EmployeeStructure SELECT 3, 'c', 1
INSERT INTO @EmployeeStructure SELECT 4, 'd', 2
INSERT INTO @EmployeeStructure SELECT 5, 'e', 2
INSERT INTO @EmployeeStructure SELECT 6, 'f', 2
DECLARE @EmployeeID INT = 2
;WITH Employee AS (
SELECT Name, ID
FROM @EmployeeStructure e
WHERE ManagerID = @EmployeeID
UNION ALL
SELECT es.Name,
es.ID
FROM Employee e INNER JOIN
@EmployeeStructure es ON e.ID = es.ManagerID
)
SELECT Name
FROM Employee
OPTION (MAXRECURSION 0)
SQL 小提琴演示 http://www.sqlfiddle.com/#!3/d41d8/13533
除此之外也许看看
使用通用表表达式 http://msdn.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx and 使用公用表表达式的递归查询 http://msdn.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx
Also,
查询提示 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms181714.aspx
最大递归数
指定此查询允许的最大递归次数。
number 是 0 到 32767 之间的非负整数。当 0 是
指定,没有限制。如果未指定此选项,则
服务器的默认限制为 100。
当达到 MAXRECURSION 限制的指定或默认数量时
查询执行期间,查询结束并返回错误。
由于此错误,该语句的所有效果都将回滚。
如果语句是 SELECT 语句,则部分结果或无结果
可能会被退回。返回的任何部分结果可能不包括所有行
递归级别超出指定的最大递归级别。