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