バックグラウンド
グループテーブル、ユーザーテーブル、およびgroup_membersテーブルがあります。
groups { group_ varchar(50) not null, etc... }
users { user_id varchar(50) not null, etc... }
group_members { group_ varchar(50 not null, member varchar(50) not null }
私の要件では、グループは他のグループをメンバーとして持つことができると述べています。ユーザーは、メンバーであるすべてのグループのメンバーと見なされる必要があります。
たとえば、これらのテーブルの次のデータについて考えてみましょう。
group_members | groups | users |
========================== | ============== | ======== |
group_ member | group_ | user_id |
-------------------------- | -------------- | -------- |
'SYSTEM_ADMIN' 'OE_ADMIN' | 'SYSTEM_ADMIN' | 'USER |
'SYSTEM_ADMIN' 'AR_ADMIN' | 'OE_ADMIN' | |
'SYSTEM_ADMIN' 'USER' | 'AR_ADMIN' | |
「ユーザー」はどのグループのメンバーですか? する必要があります
member
==============
'SYSTEM_ADMIN'
'OE_ADMIN'
'AR_ADMIN'
質問
次のクエリを作成し、必要な結果を提供しましたが、少し複雑に見えます。
WITH GM
AS (
SELECT GROUP_, MEMBER FROM group_members
WHERE member IN (SELECT group_ FROM groups)
)
SELECT group_ FROM group_members WHERE member = 'USER'
UNION
SELECT MEMBER AS GROUP_ FROM GM
WHERE group_ in (SELECT group_ FROM group_members WHERE member = 'USER')
このクエリをよりシンプルにする方法、または煩雑さを軽減する方法について何か提案はありますか?