需要查询帮助?

时间:2009-07-27 11:20:28

标签: sql sql-server sql-server-2005

我有一个分层树表结构。如何获得左树和右树。

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   

这里我只是一个以下的邻接模型。我不是在寻找嵌套模型。 这是一个重复的问题。

2 个答案:

答案 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)

我认为你需要的是CTE(通用表格表达式)

这种递归CTE可以找到here,并尝试this获得CTE的一般帮助,因为它们倾向于使用低于标准的SQL语法