我有一个递归树数据库表
DataItem
Id (uniqueidentifier)
Parent_Id? (uniqueidentifier)
PositionInParent (int)
我已经阅读了一些关于Common Table Expressions的文章,它允许我直接从SQL数据库中递归地读取树结构,但是所有这些都非常复杂,我无法使它们工作。
我试图递归地读取所有DataItem,从根(没有父)开始,并添加子项(按PositionInParent排序)
请帮我创建这个简单的例子,如果有必要,我会在那里添加更多逻辑。
答案 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