Common Table Expression基本示例

时间:2014-04-15 15:37:36

标签: sql-server common-table-expression recursive-query

我有一个递归树数据库表

DataItem

Id (uniqueidentifier)
Parent_Id? (uniqueidentifier)
PositionInParent (int)

我已经阅读了一些关于Common Table Expressions的文章,它允许我直接从SQL数据库中递归地读取树结构,但是所有这些都非常复杂,我无法使它们工作。

我试图递归地读取所有DataItem,从根(没有父)开始,并添加子项(按PositionInParent排序)

请帮我创建这个简单的例子,如果有必要,我会在那里添加更多逻辑。

1 个答案:

答案 0 :(得分:1)

;WITH HierarchyCTE (ParentId, Id, Level)
AS
(
    SELECT e.ParentId, e.Id, 0 AS Level
    FROM Employees AS e
    WHERE ParentId IS NULL
    UNION ALL
    SELECT e.ParentId, e.Id, Level + 1
    FROM Employees AS e
    INNER JOIN HierarchyCTE AS h
        ON e.ParentId = h.Id
)
SELECT ParentId, Id, Level AS PositionInParent
FROM HierarchyCTE

如果超级父母的ParentId为0,则可以使用条件WHERE ParentId = 0