В настоящее время у меня есть 3 таблицы. Допустим, пользователи, разрешения и таблица связывают их обоих (из-за отношения n
к n
), которые можно назвать usr_prm. Теперь у меня есть группа пользователей, которая должна получить определенный набор разрешений. Я могу определить обе группы с точки зрения выбора SQL. Но теперь мне интересно, есть ли способ сделать эту операцию в одном запросе вставки? До сих пор я придумал следующее решение, но это означает выполнение x
запросов, где x
- это количество разрешений, которое мне нужно добавить.
Чтобы добавить к сложности, я могу сказать, что набор пользователей выбирается на основе их уже назначенных разрешений. Таким образом, мы можем выразить это просто как: Добавить набор разрешений (т.е. PERM_1_1, PERM_1_2) для пользователей, которые уже имеют разрешение PERM_1.
Сейчас я использую PostgreSQL DB, но я надеюсь, что есть универсальное решение, потому что наше приложение также поддерживает базы данных SQL Server и Oracle для некоторых клиентов, и может оказаться полезным использовать этот сценарий и на их базах данных.
Что я сейчас использую:
insert into usr_prm (user_id, permission_id)
select users.id, (select id from permissions where name="PERM_1_1")
from users
inner join usr_prm on usr_prm.user_id = users.id
inner join permissions on permissions.id = usr_prm.permission_id
where permissions.name = "PERM_1"
and ...
insert into usr_prm (user_id, permission_id)
select users.id, (select id from permissions where name="PERM_1_2")
from users
inner join usr_prm on usr_prm.user_id = users.id
inner join permissions on permissions.id = usr_prm.permission_id
where permissions.name = "PERM_1"
and ...