我有一个分层树表结构。如何获得左树和右树。
1 a NULL
2 b 1
3 c 1
4 d 2
5 e 2
6 f 3
7 g 3
8 h 4
9 i 4
10 j 5
11 k 5
12 l 6
如果我的id为1,那么我可以得到b和c的树
我期待b下的树
2 b
4 d
5 e
8 h
9 i
10 j
11 k
这里我只是一个以下的邻接模型。我不是在寻找嵌套模型。 这是一个重复的问题。
答案 0 :(得分:1)
这将返回父1的树结构
DECLARE @Table TABLE(
ID INT,
Val VARCHAR(MAX),
ParentID INT
)
INSERT INTO @Table (ID,Val,ParentID) SELECT 1, 'a', NULL
INSERT INTO @Table (ID,Val,ParentID) SELECT 2, 'b', 1
INSERT INTO @Table (ID,Val,ParentID) SELECT 3, 'c', 1
INSERT INTO @Table (ID,Val,ParentID) SELECT 4, 'd', 2
INSERT INTO @Table (ID,Val,ParentID) SELECT 5, 'e', 2
INSERT INTO @Table (ID,Val,ParentID) SELECT 6, 'f', 3
INSERT INTO @Table (ID,Val,ParentID) SELECT 7, 'g', 3
INSERT INTO @Table (ID,Val,ParentID) SELECT 8, 'h', 4
INSERT INTO @Table (ID,Val,ParentID) SELECT 9, 'i', 4
INSERT INTO @Table (ID,Val,ParentID) SELECT 10, 'j', 5
INSERT INTO @Table (ID,Val,ParentID) SELECT 11, 'k', 5
INSERT INTO @Table (ID,Val,ParentID) SELECT 12, 'l', 6
DECLARE @ParentID INT
SET @ParentID = 1
;WITH TreeSelect AS(
SELECT ID,
Val
FROM @Table
WHERE ParentID = @ParentID
UNION ALL
SELECT t.ID,
t.Val
FROM @Table t INNER JOIN
TreeSelect ts ON t.ParentID = ts.ID
)
SELECT *
FROM TreeSelect
OPTION (MAXRECURSION 0)
答案 1 :(得分:0)