Найти недостающие значения между 3 таблицами - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 3 таблицы: Разрешения, Роли и RolePermissions.Я хотел бы иметь возможность выбрать роли, в которых отсутствуют новые строки в таблице разрешений на основе отношения таблицы RolePermissions, чтобы вставить эти значения после добавления новых разрешений.

Мне не повезло найти, как это можно сделать, поэтому я спрашиваю здесь.

Структура таблицы

Permissions | Roles | RolePermissions
------------------------------------------
Id          | Id    | Id
Name        | Name  | RoleId
            |       | PermissionId

Идея SQL, но я знаюэто не правильно:

-- Looking to be able to do something like
INSERT INTO RolePermissions (RoleId, PermissionId)
SELECT missingpermissions.PermissionId, missingpermissions.RoleId
FROM Permissions as p
INNER JOIN(
Select r.Id as RoleId,  p.Id as PermissionId
    FROM Role as r
    LEFT JOIN RolePermissions as rp
        ON r.Id = rp.RoleId
    WHERE rp.PermissionId = p.Id
) as missingpermissions 
ON p.id = missingpermissions.permissionid

Отредактировано в формате

1 Ответ

0 голосов
/ 04 октября 2018

Вам необходимо получить новое разрешение и перекрестно объединить все роли (чтобы получить все комбинации ролей и новых разрешений).

INSERT INTO RolePermissions(RoleId, PermissionId)
    SELECT r.ID AS RoleId,p.ID AS PermissionId
    FROM Role r
    CROSS JOIN (
       --get all permissions currently not assigned to a role (presumably "new")
       select p.*
       from Permissions p
       left join RolePermissions rp on p.id=rp.PermissionId
       where rp.PermissionId is null
    ) p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...