2009-07-27 146 views
0

我有一個分層的樹表結構。我怎樣才能得到左樹和右樹。需要查詢幫助嗎?

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 

如果我有一個,即1。如何的ID可以我得到的B中的樹和c

我期待在B樹作爲

2 b 
4 d 
5 e 
8 h 
9 i 
10 j 
11 k 

在這裏,我的下面鄰接模型只有我去。我不尋找嵌套模型。 這可能是一個重複的問題。

+0

請問您是否可以嘗試更改您的問題。至少對我來說,這一切都沒有什麼意義...... – fresskoma 2009-07-27 11:30:29

回答

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) 
0

我想你需要的CTE(公共表表達式)

這種遞歸CTE可以發現here什麼,並嘗試this爲對CTE的一般幫助,因爲他們傾向於使用低於標準的SQL語法