Tôi đã theo bảng cây thứ bậcSử dụng SQL CTE bảng để bao gồm đường dẫn và tất cả trẻ em
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
Những bản đồ để sau cây
0
+- 1
+- 2
+- 4
+- 5
+- 3
+- 6
+- 7
Sử dụng CTE bảng đệ quy, làm thế nào tôi có thể nhận được đường dẫn và cũng là tất cả trẻ em của nút được chọn. Ví dụ có 2
như đầu vào, làm thế nào tôi có thể nhận được dữ liệu sau (đặt hàng nếu có thể)
Id, ParentID
-------
0, NULL
1, 0
2, 1
4, 2
5, 2
Tôi biết tôi có thể đi qua lên trong cây (lấy đường dẫn) với sau tuyên bố
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
Và với sau tuyên bố, Traverse xuống trong cây (nhận được tất cả trẻ em)
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
câu hỏi: Làm thế nào để kết hợp hai lệnh dưới đây vào một?
+1 Để cung cấp lời giải thích tốt, DDL, DML và dữ liệu thử nghiệm. –