如何对表执行迭代查询?我有一个简单的表格,包括:
KeyField, childID, parentID
从childID开始,我想拉取parentID然后再次查询以查看该父级(现在是子级)是否具有自己的父级,在整个层次结构中进行操作,我该如何做?
Microsoft SQL Server,版本号09.00.3042
答案 0 :(得分:5)
在SQL Server 2005及更高版本中,最好使用递归CTE(公用表表达式)进行此类查询。 (在SQL 2000及更早版本中,您只能使用递归存储过程)。
您需要的是以下内容:
WITH ParentChildRels (ParentId, ChildId, KeyField, HierarchyLevel) AS
(
-- Base case
SELECT
ParentId,
ChildId,
KeyField,
1 as HierarchyLevel
FROM Records
WHERE ChildId = @ChildId
UNION ALL
-- Recursive step
SELECT
r.ParentId,
r.ChildId,
r.KeyField,
pr.HierarchyLevel + 1 AS HierarchyLevel
FROM Records r
INNER JOIN ParentChildRels pr ON
r.ParentId = pr.ParentId
)
SELECT *
FROM ParentChildRels
ORDER BY HierarchyLevel, ParentId, ChildId, KeyField