0

我有 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。我想创建一个视图(称为 myView),以便我可以(或 ORM 可以)这样做:


从 myView 中选择名字、姓氏、电子邮件地址、订阅ID,其中订阅 ID = 7 或订阅 ID 为空

请问你能帮帮我吗?先感谢您。

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 回答