0

2つのテーブルがあります。1つはpermissionsと呼ばれ、もう1つはrolesと呼ばれ、NN関係のRolePermissionsと呼ばれる3番目のテーブルを介して関連付けられています。

Permissions
 id <- PK
 name


Roles
 id <- PK
 name

RolePermisions
 RoleId  <-PK
 PermissionId <-PK
 isAllowed

私が欲しいのは、特定のロールの権限の完全なリストを取得することです。そのロールのRolePermissionテーブルに値がない場合はNULLを取得します。通常、左結合でうまくいきますが、これを解決することはできません。

基本的に、私が次の値を持っているとしましょう:

Permsissionの場合:

1 - Per1
2 - Per2
3 - Per3

そして役割:

1 - Role1
2 - Role2

そしてRolePermissionsで:

RoleId  -  PermissionId - isAllowed
 1            1             true
 1            2             false
 1            3             true
 2            1             true

次のクエリsortaは機能しますが、RolePermissionsにない値に対してNULLを返しません。

select permissions.name, rolepermissions.allowed 
FROM permissions LEFT JOIN rolepermissions  
    ON rolepermissions.permissionId = permissions.id 
WHERE rolepermissions.roleId = 2;

ロール2を照会するときに探している結果は次のとおりです。

Per1 - true
Per2 - NULL
Per3 - NULL
4

1 に答える 1

1

CROSS JOINあなたは:でこれを行うことができます

SELECT
    r.ID AS RoleID,
    p.ID AS PermissionID,
    rp.IsAllowed
FROM
    Roles r CROSS JOIN
    Permissions p LEFT JOIN
    RolePermissions rp ON rp.RoleId = r.ID AND rp.PermissionID = p.ID
WHERE r.ID = @RoleID
于 2012-03-12T22:57:04.013 に答える