これを適切に表現するのは少し難しい..
- テーブル A には役割があります
- 表 B は役割をアセットに結び付けます
- 表 C は資産用です
Roles から Assets へは多対多の関係があります。
Assets の列のビット値に基づいて..その値を持つ役割にそれをマップしたいと思います。しかし、多対多の関係があるため、私は多くの役割を担っています。したがって、私が望むのは、ビット = 1 の資産が同等の役割を返す場合です。ロールの PK を重複させたくありません。重複したロールを返すクエリ (PK による) は次のようになります。
select rls.Role_ID,
asset.Asset_ID,
Asset.Is_Public
from Roles rls
inner join Role_Asset on rls.Role_ID = Role_Asset.Role_ID
inner join Asset on Role_Asset.Asset_ID = asset.Asset_ID
where Asset.Is_Public =1
問題は、多対多の関係のために、多数のrolesIDを有効にすることです..パブリックアセットがロールに関連付けられている場合..そのロールが必要ですが、そのロールのみが必要です。ロールが多数のアセットに関連付けられていて、1 つが 1 で、もう 1 つが 0 の場合、それを返す必要があります (したがって、ロールに関連付けられているパブリック アセットがそれを返す場合)。
そしてその逆 (別名 IS_PUBLIC=0)