我有 3 个表:用户、组和成员。
用户有 ID 和名称。
组也有 Id 和 Name。
Membership有 id、GroupId 和MemberId
问题是MemberId既可以是用户也可以是组。
我想要的是获取用户是否直接属于的所有组。
为此,我使用 CTE,如下所示:
WITH MyGroups AS(
select *,1 as GLevel from [Group] as g where g.id IN (SELECT groupId FROM Membership m where m.memberId='MYID')
UNION ALL
select g.*,2 from [Group] g inner JOIN MyGroups my on my.id=g.id --where g.id IN (SELECT groupId FROM ACLTests.dbo.Membership m where m.groupid=g.id))
Select * from MyGroups
但我要超过 100 个递归级别......有人可以帮忙吗?
样本数据:
用户表:
ID----------|标题---------
myUser1 |John
myUser2 |Leo
组表:
ID---------|标题---------
myG1 。. .|Group1
我的G2 。. .|组2
会员表:
ID | 组ID | 会员编号
01 | 我的G1... . .| 我的用户1 02
| 我的G1... . .| 我的G2
03 | 我的G2... . .| 我的用户2
MyUser1的预期结果:Group1 MyUser2的
预期结果:Group1,Group2(G2 是 g1 的成员,User2 是 G2 的成员,所以 User2 也是 G1 的成员)