0

我有两张表,一张称为权限,一张称为角色,它们通过 NN 关系中名为 RolePermissions 的第三张表相关联。

Permissions
 id <- PK
 name


Roles
 id <- PK
 name

RolePermisions
 RoleId  <-PK
 PermissionId <-PK
 isAllowed

我想要的是获取特定角色的完整权限列表,以及当 RolePermission 表中没有该角色的值时为 NULL。左连接通常可以解决问题,但我无法解决这个问题。

基本上假设我有以下值:

在许可中:

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

以下查询排序有效,但不会为那些不在 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 回答