以下の構造のメンバーシップテーブルがあります
GroupID MemberType MemberID
G1 user U1
G1 group G2
G2 user U2
G2 group G3
G3 group G1
ここで、私のニーズは.. GroupID を使用してグループ メンバーを取得する必要がある..
Direct members の場合、 where クエリで GroupID 列を使用して簡単に実行できます。
しかし、入れ子になったメンバーも取得するには、このクエリを再帰的に実行する必要があります。そのために、次の CTE クエリを使用しました。
;with cte as
(
select *, groupid as mastergroup,1 as level from mytable
union all
select t1.memberid, t1.membertype, null, cte.mastergroup, level+1
from cte
inner join mytable t1
on t1.groupid=cte.memberid
where cte.membertype='group'
)
select * from cte
where mastergroup='G1'
良い。ネストされたグループ間にループがない場合は正常に機能しています。しかし、私の場合
私はこのようにループ構造を持っています... G1--> G2--> G3--> G1 ... したがって、この場合、クエリは CTE ループで無期限に実行されます。
このケースを解決するために私を助けることができますか?.....事前に感謝します.....