如何进行多级嵌套循环连接?

How do I do a multiple level Nested Loop Join?

我确定这一定是一个常见的编码问题,但我什至不知道如何称呼它。

对于任何给定的人,我想找到他们的团队 - 现在团队中可能有团队,也可能没有 - 这是不可预测的。

所以我可以只做嵌套循环,这很好,但我想知道是否有更聪明、更奇特的方法来做这件事?我最终会一遍又一遍地迭代相同的数据集(大约 10,000 条记录,代表可能的 7 个层次结构级别),这不是最有效的。

MS SQL 服务器 2012? Python3.10?

PersonID PersonName Lev3 Lev2 Lev1 ManagerID
4703 John Department A Group D Division A 5763
4367 Janet Department B Group E Division B 4744
7033 Bob Department C Group D Division A 5763
5763 Sarah None Group D Division A 5224
4744 Phil None Group E Division B 5224
5224 Petra None None None None

假设我想找到 Petra 的团队 - ID 5224 - 应该是每个人,因为她是食物链的顶端。但是菲尔? ID 4744 - 那只是珍妮特。与团队中同时拥有 John 和 Bob 的 Sarah - ID 5763 相比。

此 SQL 代码将仅标识直属团队 - 而不是团队中的团队。

SELECT
   M.[Employee Name], S.[Employee Name]
FROM [Staff] M
JOIN [Staff] S
ON M.PositionID = S.ManagerPosition
WHERE 
    M.PositionID > 0
ORDER BY 
    m.[Employee Name]

我怎么能在嵌套循环中使用嵌套循环 - 最多 7 层深?

您将需要使用递归 CTE。阅读本文,看看是否可以将其应用到您的案例中:https://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/