对于我们的一位客户,我必须为没有该角色的每个人打开一个 ASP.NET 角色。我当前的查询(有效)如下,但我认为这个查询可以变得更容易/更简单,并且我采取了迂回的方式。
ASP.NET 成员资格模型如下:aspnet_Users 与 aspnet_Roles 的多对多。这种多对多关系存储在 aspnet_UsersInRoles 中。
SELECT
u2.UserId,
u2.UserName,
r2.RoleId,
r2.RoleName
FROM .[dbo].[aspnet_Users] u2
CROSS JOIN .[dbo].[aspnet_Roles] r2
WHERE not exists (
SELECT
r.[ApplicationId]
,r.[RoleId]
,r.[RoleName]
,ur.[UserId]
,u.UserName
FROM .[dbo].[aspnet_Roles] r
INNER JOIN .[dbo].[aspnet_UsersInRoles] ur on r.RoleId = ur.RoleId
INNER JOIN .[dbo].[aspnet_Users] u on u.UserId = ur.UserId
WHERE r.RoleId = '73635AD6-0282-4289-85C4-7B4359D1D640' and u.UserId = u2.UserId
) AND r2.RoleId = '73635AD6-0282-4289-85C4-7B4359D1D640'
因此,基本上,我首先计算具有该角色的所有用户的交叉连接,然后减去已经处于该角色的每个人,以获得不处于该角色的用户的结果集。
感觉就像是一种迂回的方式来解决这个问题。是否有更简单(或更直观)的方法来获得相同的结果?