我有两个表,一个称为权限,一个称为角色,这些表通过N-N关系中名为RolePermissions的第三个表相关联。
Permissions
id <- PK
name
Roles
id <- PK
name
RolePermisions
RoleId <-PK
PermissionId <-PK
isAllowed
我想要的是获取特定角色的完整权限列表,以及当该角色的RolePermission表中没有值时为NULL。左连接通常可以解决问题,但我无法解决这个问题。
基本上我要说我有以下数值:
In 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
答案 0 :(得分:0)
您可以使用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