持っているデータに再び結合するには、すべてのコンボのドライバー テーブルが必要です。
select allcombos.subscriptionId, allcombos.ProductPermissionId,
sp.granted
from (select SubscriptionId, ProductPermissionId
from subscription s cross join ProductPermission pp
) allcombos left outer join
SubscriptoinPermission sp
on sp.subscriptionId = allcombos.subscriptionId and
sp.ProductionPermissionId = allcombos.ProductPermissionId
サブスクリプション ID を指定する句を追加できwhere
ますが、その前に allcombo を付ける必要があります。
where allcombos.SubscriptionId = <whatever>
サブスクリプション製品のみが必要な場合は、allcombos サブクエリを変更します。
select allcombos.subscriptionId, allcombos.ProductPermissionId,
sp.granted
from (select distinct SubscriptionId, pp2.ProductPermission
from subscriptionProduct sp join
ProductPermission pp
on sp.ProductPermissionId = pp.ProductPermissionId left outer join
ProductionPermission pp2
on pp.ProductId = pp2.ProductId
) allcombos left outer join
SubscriptionPermission sp
on sp.subscriptionId = allcombos.subscriptionId and
sp.ProductionPermissionId = allcombos.ProductPermissionId
これは、サブスクリプション内の製品に対するすべてのアクセス許可を取得するための最もクリーンな変更ではない可能性があります。SubscriptionProduct テーブルがあればいいのですが。しかし、そのようなものはうまくいくはずです。