我正在寻找如何实现一个查询,该查询返回层次结构中允许特定节点的多个父节点的所有节点的所有级别(在所有级别,因此它包括直接祖先,祖先的祖先等).
给出以下表结构:
Table Nodes: Id, Name
Table Relations: IdNode, IdParentNode
Run Code Online (Sandbox Code Playgroud)
一个类似的问题是SQL Server - 以多对多的关系获取连续的所有孩子?,但我没有成功地适应我的情况.
您可以使用递归CTE:
DECLARE @IdNode INT -- use the correct data type
SET @IdNode = 1 -- here use the node you want to search
;WITH CTE AS
(
SELECT IdNode,
IdParentNode Ancestor,
1 TreeLevel
FROM Relations
WHERE IdNode = @IdNode
UNION ALL
SELECT A.IdNode,
B.IdParentNode,
TreeLevel + 1
FROM CTE A
INNER JOIN Relations B
ON A.Ancestor = B.IdNode
)
SELECT *
FROM CTE
OPTION(MAXRECURSION 200)
Run Code Online (Sandbox Code Playgroud)
这OPTION(MAXRECURSION 200)意味着它只能看到200级深度,OPTION(MAXRECURSION 0)如果你想为所有级别设置它,你可以使用它(尽管确保查询可以在完成之前完成).
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |