i有一个表,将层次结构数据以父子格式存储在一个顶部节点。多个级别,每个父母都有多个孩子。我如何编写递归查询以仅选择从特定节点到最后一个孩子的父子行?
示例表
Parent|child
1 |2
1 |3
2 |4
2 |5
3 |6
3 |7
6 |8
我如何仅从节点3及其所有后代检索行?
如果您的DBMS是SQL Server,则可以使用Recursion通过常见的表格(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