【发布时间】:2017-05-06 15:25:13
【问题描述】:
这是我的桌子:
EmployeeID Employee ManagerID
---------------------------------
1 Anna 5
2 John 4
3 Steve 4
4 Lisa 1
5 Adam NULL
6 Per 1
通过这样的自加入来获得父子关系对我来说没有问题:
SELECT
E.EmployeeID,
E.Employee AS Employee,
E.ManagerID,
M.Employee AS Manager
FROM
Employee AS E
LEFT JOIN
Employee AS M ON E.ManagerID = M.EmployeeID
EmployeeID Employee ManagerID Manager
1 Anna 5 Adam
2 John 4 Lisa
3 Steve 4 Lisa
4 Lisa 1 Anna
5 Adam NULL NULL
6 Per 1 Anna
但是,我将如何确保父级看到整个层次结构?
我希望表格如下所示:
EmployeeID Manager Employee EmployeeID
5 Adam Anna 1
5 Adam Per 6
5 Adam Lisa 4
5 Adam John 2
5 Adam Steve 3
1 Anna Per 6
1 Anna Lisa 4
1 Anna John 2
1 Anna Steve 3
4 Lisa John 2
4 Lisa Steve 3
注意:在这个例子中我只有 3 个级别的管理器,但可以有更多
【问题讨论】:
-
SQL Server 对此有一个 hierarchyId 类型。
-
另一种方法是使用recursive CTE。根据记录数和级别数,您可能会发现此方法有点慢。
-
嗨,是的,我一直在研究递归 CTE,但不完全了解如何在不了解关卡的情况下使用它。你有这个问题的例子吗?
标签: sql-server tsql parent-child hierarchy