【发布时间】:2016-11-30 07:06:12
【问题描述】:
我需要得到一个给定节点的相关节点树,但不是必要的顶部节点。我有一个使用两个 CTE 的解决方案,因为我正在努力将它全部压缩到一个 CTE 中:)。可能有人有一个巧妙的解决方案来避免使用两个 CTE?这是我正在玩的一些代码:
DECLARE @temp AS TABLE (ID INT, ParentID INT)
INSERT INTO @temp
SELECT 1 ID, NULL AS ParentID
UNION ALL
SELECT 2, 1
UNION ALL
SELECT 3, 2
UNION ALL
SELECT 4, 3
UNION ALL
SELECT 5, 4
UNION ALL
SELECT 6, NULL
UNION ALL
SELECT 7, 6
UNION ALL
SELECT 8, 7
DECLARE @startNode INT = 4
;WITH TheTree (ID,ParentID)
AS (
SELECT ID, ParentID
FROM @temp
WHERE ID = @startNode
UNION ALL
SELECT t.id, t.ParentID
FROM @temp t
JOIN TheTree tr ON t.ParentID = tr.ID
)
SELECT * FROM TheTree
;WITH Up(ID,ParentID)
AS (
SELECT t.id, t.ParentID
FROM @temp t
WHERE t.ID = @startNode
UNION ALL
SELECT t.id, t.ParentID
FROM @temp t
JOIN Up c ON t.id = c.ParentID
)
--SELECT * FROM Up
,TheTree (ID,ParentID)
AS (
SELECT ID, ParentID
FROM Up
WHERE ParentID is null
UNION ALL
SELECT t.id, t.ParentID
FROM @temp t
JOIN TheTree tr ON t.ParentID = tr.ID
)
SELECT * FROM TheTree
谢谢
【问题讨论】:
标签: tsql