目前我有 3 张 table 。假设用户、权限和链接它们的表(由于 n
到 n
的关系)可以称为 usr_prm。现在我有一组用户应该获得某些权限。我可以根据 sql 选择来定义这两个组。但现在我想知道有没有办法在单个插入查询中执行此操作?到目前为止,我提出了以下解决方案,但这意味着运行 x
查询,其中 x
是我需要添加的权限数。
为了增加复杂性,我可以说这组用户是根据他们已经分配的权限来选择的。因此我们可以简单地表达为:向已经拥有权限 PERM_1 的用户添加一组权限(即 PERM_1_1、PERM_1_2)。
我现在正在使用 PostgreSQL 数据库,但我希望有一个通用的解决方案,因为我们的应用程序还支持某些客户的 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 ...
最佳答案
这是你想要的吗?
insert into usr_prm (user_id, permission_id)
select up.user_id, p2.id
from usr_prm up inner join
permissions p
on p.id = up.permission_id cross join
(select p2.*
from permissions p2
where p2.name in ('PERM_1_1', 'PERM_1_2', . . .)
) p2
where p.name = 'PERM_1';
根据您的示例代码,您不需要 users
表,除非其他条件需要它。
关于sql - 在两次选择中为每对插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117047/