在两个选择中为每对插入记录

时间:2018-11-02 10:43:20

标签: sql sql-server oracle postgresql sql-insert

目前我有3张桌子。假设用户,权限和表将它们两者链接在一起(由于nn的关系),它们可以称为usr_prm。现在,我有一组用户,这些用户应该获得某些权限。我可以根据sql select定义两个组。但是现在我想知道是否可以在单个插入查询中执行此操作?到目前为止,我已经提出了以下解决方案,但这意味着运行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 ...

1 个答案:

答案 0 :(得分:1)

这是您想要的吗?

pnn_network.train(input_dataset_data.iloc[train], input_dataset_target.iloc[train])

根据您的示例代码,您不需要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'; 表,除非其他条件需要这样做。