ユーザー、グループ、メンバーシップの 3 つのテーブルがあります。
ユーザーには ID と名前があります。
グループには ID と名前もあります。
メンバーシップには 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 . . .|
グループ1 myG2 . . .|グループ2
メンバーシップ テーブル:
ID | グループ ID | メンバーID
01 | myG1.. . . .| myUser1
02 | myG1.. . . .| myG2
03 | myG2.. . . .| MyUser2
MyUser1の予期される結果: Group1 MyUser2 の予期される
結果: Group1、Group2 (G2 は g1 のメンバーであり、User2 は G2 のメンバーであるため、User2 も G1 のメンバーです)