我有三张桌子:
ProductPermission
SubscriptionPermission
订阅
关键是,如果指定了SubscriptionId,我需要为每个ProductPermission显示。我的意思是,假设一个产品有30种权限类型,并且该产品的订阅分配了20个权限,我想要的是显示30个权限,授予的列可以是0,1或NULL。
这是我需要的信息:
+----------------+---------------------+---------+ | SubscriptionId | ProductPermissionId | Granted | +----------------+---------------------+---------+
请问你能帮帮我吗?
PS:如果你能提高头衔,请这样做。我真的不知道怎么问这个。
答案 0 :(得分:0)
您需要一个包含所有组合的驱动程序表才能加入到您拥有的数据中:
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表会很好。但是,这样的事情应该有效。