0

私は3つのテーブルを持っています:

製品許可

  • ID
  • 製品番号
  • 権限名

購読許可

  • ID
  • 製品権限 ID
  • 承諾する
  • サブスクリプション ID

サブスクリプション

  • ID
  • 製品番号
  • サブスクリプション名

ポイントは、特定の SubscriptionId を指定すると、すべての ProductPermission に対して表示する必要があるということです。つまり、製品に 30 のアクセス許可タイプがあり、その製品のサブスクリプションに 20 のアクセス許可が割り当てられているとします。30 のアクセス許可を表示したいのですが、付与された列は 0、1、または NULL にすることができます。

これは私が必要とする情報です:

+----+---------------------+---------------------+
| | サブスクリプション ID | ProductPermissionId | 付与 |
+----+---------------------+---------------------+

私を手伝ってくれますか?

PS: タイトルを改善できる場合は、それを行ってください。私は本当にこれを尋ねる方法がわかりません。

4

1 に答える 1

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

サブスクリプション 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 テーブルがあればいいのですが。しかし、そのようなものはうまくいくはずです。

于 2012-12-05T15:18:20.780 に答える