У меня есть две таблицы, одна из которых называется разрешениями, а другая - ролями, которые связаны через третью таблицу, называемую RolePermissions в отношении NN.
Permissions
id <- PK
name
Roles
id <- PK
name
RolePermisions
RoleId <-PK
PermissionId <-PK
isAllowed
Мне нужно получить полный список разрешенийконкретной роли и значениями NULL, если в таблице RolePermission нет значения для этой роли.Левые объединения обычно делают свое дело, но я не могу решить это.
В основном, допустим, у меня есть следующие значения:
В 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
Следующий запрос вида работает, но он не будет возвращать значения NULL для тех значений, которых нет в RolePermissions:
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