你需要的所有连击的驱动程序表加入回您拥有的数据:
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