0

従来の Users、UserRoles、および Roles テーブルがあります。(多対多の関係もおそらく適用されます。)

ユーザーとロールには、PK 列として Id があります。Roles には、外部キーとして UserId と RoleId があります。

ロールごとにビット列があり、ビット列の各値がユーザーにロールがあるかどうかを示すような SELECT クエリを作成するにはどうすればよいでしょうか? LINQ でこれを行う方法を考えていますが、プレーン SQL で必要です。

つまり、SELECT IsAdmin (それが必要な場合、ここに何を入力しますか?)、IsModerator (ここにも?)、... FROM ユーザー JOIN 何?

どんな助けでも大歓迎です。

4

1 に答える 1

0

フラグ列ではなく、いくつかのビット列を意味していると思います。
sum または max と一緒に加算する必要があるため、bit を使用しないことをお勧めします。したがって、変換/キャストする必要がないようにするには、整数を使用する必要があります。

T_グループ:

GRP_ID
GRP_Name 
GRP_IsAdmin AS integer
GRP_IsModerator AS integer
GRP_IsGuest AS integer

T_ユーザー

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 に答える