0

userとlicenseduserの2つのテーブルがあります。最初のユーザーにはすべてのユーザーが含まれ、2番目のユーザーにはライセンスを持つユーザーのみが含まれます(2つの列:useruidとsubscriptionid)。

SubscriptionIdが与えられた場合、すべてのユーザーと、各ユーザーがサブスクリプションを持っているかどうかを示すブールフラグ列をグリッドに表示する必要があります。

例:次のクエリは、subscriptionId=7の場合を示します。

select firstname, lastname, emailaddress, subscriptionid 
from dbo.[user]
left join (select * from dbo.licensedUser where subscriptionid = 7) lu on dbo.[user].[Uid] = lu.useruid 

ただし、エグゼキュータプログラムはORMを使用するため、このクエリは役に立ちません。これを実行できる(またはORMで実行できる)ようなビュー(myViewと呼ばれる)を作成したい:

myViewからfirstname、lastname、emailaddress、subscriptionid
を選択します。subscriptionid=7またはsubscriptionidがnullの場合

私を手伝ってくれますか?前もって感謝します。

4

1 に答える 1

1

サブスクリプションのテーブルがある場合は、これを使用できます。

CREATE VIEW
        v_user_subscription
SELECT  u.*, s.subscriptionId, lu.subscriptionId AS subscribed
FROM    user u
CROSS JOIN
        subscription s
LEFT JOIN
        licensedUser lu
ON      lu.userId = u.uid
        AND lu.subscriptionId = s.subscriptionId

そしてこれを使用してください:

SELECT  firstname, lastname, emailaddress, subscribed
FROM    v_user_subscription
WHERE   subscriptionId = 7

ORMで。

おそらく巨大になるため、フィルタリングせずにこのビューから選択することは望ましくありませんが、フィルターをオンsubscriptionId SQL Serverにするとビューが拡張され、実際には他のサブスクリプションを参照しません。

于 2012-11-01T20:18:06.900 に答える