7
我有以下層次樹表使用SQL CTE表包括
GO
DROP TABLE #tbl
GO
CREATE TABLE #tbl (Id int , ParentId int)
INSERT INTO #tbl (Id, ParentId) VALUES (0, NULL)
INSERT INTO #tbl (Id, ParentId) VALUES (1, 0)
INSERT INTO #tbl (Id, ParentId) VALUES (2, 1)
INSERT INTO #tbl (Id, ParentId) VALUES (3, 1)
INSERT INTO #tbl (Id, ParentId) VALUES (4, 2)
INSERT INTO #tbl (Id, ParentId) VALUES (5, 2)
INSERT INTO #tbl (Id, ParentId) VALUES (6, 3)
INSERT INTO #tbl (Id, ParentId) VALUES (7, 3)
GO
映射到下面的樹
0
+- 1
+- 2
+- 4
+- 5
+- 3
+- 6
+- 7
使用CTE遞歸表,我怎麼能得到的路徑和路徑,所有的孩子也是選定節點的所有子節點。例如,具有2
作爲輸入,我怎麼能得到以下數據(有序如果可能的話)
Id, ParentID
-------
0, NULL
1, 0
2, 1
4, 2
5, 2
我知道我可以在樹遍歷了(得到的路徑)與下面的語句
WITH RecursiveTree AS (
-- Anchor
SELECT *
FROM #tbl
WHERE Id = 2
UNION ALL
-- Recursive Member
SELECT Parent.*
FROM
#tbl AS Parent
JOIN RecursiveTree AS Child ON Child.ParentId = Parent.Id
)
SELECT * FROM RecursiveTree
並與下面的語句,在樹向下遍歷(讓所有的孩子)
WITH RecursiveTree AS (
-- Anchor
SELECT *
FROM #tbl
WHERE Id = 2
UNION ALL
-- Recursive Member
SELECT Child.*
FROM
#tbl AS Child
JOIN RecursiveTree AS Parent ON Child.ParentId = Parent.id
)
SELECT * FROM RecursiveTree
問題:如何結合這兩個命令變成一個?
+1的聯盟提供了很好的解釋,DDL,DML和測試數據。 – 2013-02-13 09:23:08