我有一组表格,可以将一群人组织成团队。
- 用户(ID int PK等)
- 团队(ID int PK 等)
- UsersToTeams(ID int PK,UserID int FK,TeamID int FK,TeamSupervisor 位不为空)
表中没有父 ID,因为用户可以在任意数量的团队中,并且团队可以有任意数量的主管。一个用户可能在六个团队中,但只监督其中两个,而这些受监督团队中的一个或两个可能有其他监督者。所以我的层次结构看起来更像是一张网而不是一棵树。
我认识到递归查询可能会导致循环引用。假设该软件目前正在处理该问题。
公司层次结构由主管用户团队的主管、主管主管团队的经理等描述。所以它是分层的,但不是以通常的方式。
我需要一个查询,给定一个 UserID,它将返回他监督的用户的 ID,向下无限级别。这样的查询会如何进行?
例子
Users (ID, Name)
1 Archie
2 Betty
3 Chuck
4 Dilton
5 Eddie
6 Fannie
用户 1 是经理(级别 3)。用户 2 和 3 是主管(2 级)。用户 4、5、6 是用户(级别 1)。
Teams (ID, Name)
1 Team Alpha
2 Team Bravo
3 Sup Team
UsersToTeams (ID INT PK, UserID INT FK, TeamID INT FK, isSupervisor BIT)
1 1 3 1 -- Archie supervises Sup Team
2 2 3 0 -- Betty is a member of Sup Team
3 3 3 0 -- Chuck is a member of Sup Team
4 2 1 1 -- Betty supervises team Alpha
5 4 1 0 -- Dilton is a member of team Alpha
6 5 1 0 -- Eddie is a member of team Alpha
7 3 2 1 -- Chuck supervises Team Bravo
8 6 2 0 -- Fannie is a member of Team Bravo
- Archie 是一名经理,负责监督一个主管团队。
- Betty 是一名主管,负责监督一组用户。
- Chuck 是一名主管,负责监督一组用户。
- Betty 和 Chuck也在Archie 的团队中,但不对其进行监督。
所以:
- 如果我传入 UserID 5 (Eddie),我应该只返回 5,因为 Eddie 不监督任何人。
- 如果我传入 UserID 3 (Chuck),我应该返回 3 和 6,因为 Fannie 在 Chuck 监督的团队中。
- 如果我传入 UserID 1 (Archie),我应该取回此处描述的所有 UserID,因为 Betty 和 Chuck 在 Archie 的团队中,而其他所有人都在 Betty 的团队或 Chuck 的团队中。
抱歉,我尝试了那个 SQL 小提琴链接,但是在 15 分钟的“构建模式”之后,我对它失去了希望。