【发布时间】:2013-11-04 16:30:29
【问题描述】:
我有 3 个表:用户、组和成员资格。
用户 有 Id 和名称。
组 也有 Id 和名称。
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---------|标题----------
我的用户 1 |约翰
我的用户2 |狮子座
组表:
ID---------|标题----------
我的 G1 。 . .|组1
我的 G2 。 . .|组2
会员表:
身份证 |组ID |会员编号
01 |我的G1... . .|我的用户1
02 |我的G1... . .|我的G2
03 |我的G2... . .|我的用户2
MyUser1 的预期结果:Group1
MyUser2 的预期结果:Group1,Group2(G2 是 g1 的成员,User2 是 G2 的成员,所以 User2 也是 G1 的成员)
【问题讨论】:
-
那你的问题是什么?您能否发布一些示例数据和预期输出?
-
@Rachcha 已编辑!看看...
标签: sql sql-server recursion recursive-query