簡體   English   中英

SQL查詢聯接表

[英]SQL query joining tables

我有三個表:

產品許可

  • ID
  • 產品編號
  • 權限名稱

訂閱權限

  • ID
  • ProductPermissionId
  • 已授予
  • SubscriptionId

訂閱

  • ID
  • 產品編號
  • 訂閱名稱

關鍵是給定指定的SubscriptionId后,我需要為每個ProductPermission顯示。 我的意思是,假設一個產品有30種權限類型,並且為該產品的“訂閱”分配了20種權限,那么我要顯示30種權限,所授予的列可以為0、1或NULL。

這是我需要的信息:

+----------------+---------------------+---------+
| SubscriptionId | ProductPermissionId | Granted |
+----------------+---------------------+---------+

請問你能幫幫我嗎?

PS:如果可以改善標題,請執行。 我真的不知道該怎么問。

您需要所有組合的驅動程序表才能聯接回您擁有的數據:

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表,那就太好了。 但是,類似的事情應該起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM