0

我有经典的用户、用户角色和角色表。(任何多对多关系也可能适用。)

User 和 Role 将 Id 作为其 PK 列。Roles 具有 UserId 和 RoleId 作为外键。

我将如何构造这样一个 SELECT 查询,其中每个角色都有一个位列,位列的每个值是用户是否具有角色?我知道如何在 LINQ 中执行此操作,但我需要在纯 SQL 中使用它。

所以,SELECT IsAdmin(如果我需要这样做,我应该放什么?),IsModerator(也在这里?),... FROM Users JOIN WHAT?

任何帮助,将不胜感激。

4

1 回答 1

0

我假设您的意思是几个位列,而不是标志列。
我建议不要使用 bit,因为您需要将它们与 sum 或 max 相加。所以你应该使用整数,以便不必转换/转换。

T_组:

GRP_ID
GRP_Name 
GRP_IsAdmin AS integer
GRP_IsModerator AS integer
GRP_IsGuest AS integer

T_Users

USR_ID
USR_DisplayName
USR_UserName
USR_PasswordHash
USR_PassWordSalt
USR_PassWordAlgorithm

T_MAP_Users_Groups

MAP_USRGRP_ID
MAP_USRGRP_USR_ID
MAP_USRGRP_GRP_ID

像这样查询:

SELECT 
     USR_ID, USR_Name
    ,MAX(GRP_IsAdmin) AS IsAdmin
    ,MAX(GRP_IsModerator) AS IsModerator
    ,MAX(GRP_IsGuest) AS IsGuest

FROM T_Users 
    LEFT JOIN T_MAP_Users_Groups 
        ON MAP_USRGRP_USR_ID = USR_ID

    LEFT JOIN T_Groups
         ON GRP_ID = MAP_USRGRP_GRP_ID

GROUP BY USR_ID, USR_Name 
于 2013-08-20T22:08:10.000 回答