你需要的所有連擊的驅動程序表加入回您擁有的數據:
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
您可以添加where
子句指定subscriptionid,但你需要allcombos前綴是:
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表,那將會很好。但是,像這樣的東西應該工作。
標題看起來不錯 - 有一個警告。標籤[SQL]不應放置在標題中。 – MikeTheLiar