我有一个表,它以父子格式存储层次结构数据,并带有一个顶级节点。多个级别,每个父级有多个子级。如何编写递归查询以仅选择从特定节点到最后一个子节点的父子行?
示例表
Parent|child
1 |2
1 |3
2 |4
2 |5
3 |6
3 |7
6 |8
如何只检索节点3及其所有后代的行?
答案 0 :(得分:3)
如果您的DBMS是SQL Server,您可以使用递归通过公用表表达式(CTE)完成此操作。我相信这适用于所有版本2008R2及更高版本。以下查询将为您提供3个后代的所有父子关系。
CREATE TABLE dbo.ParentChildRel
(
Parent INT
,Child INT
)
INSERT INTO dbo.ParentChildRel
VALUES (1,2)
,(1,3)
,(2,4)
,(2,5)
,(3,6)
,(3,7)
,(6,8)
,(7,10)
;WITH Hierarchy AS
(
SELECT Parent
,Child
FROM dbo.ParentChildRel
WHERE Parent = 3
UNION ALL
SELECT rel.Parent
,rel.Child
FROM Hierarchy hier
INNER JOIN dbo.ParentChildRel rel ON hier.Child = rel.Parent
)
SELECT *
FROM Hierarchy
结果
Parent Child
3 6
3 7
7 10
6 8