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

Sql 在两个选择中插入每对的记录,sql,sql-server,oracle,postgresql,sql-insert,Sql,Sql Server,Oracle,Postgresql,Sql Insert,目前我有3张桌子。假设用户、权限和表都链接它们,这是因为n对n的关系,可以称为usr_prm。现在我有了一组用户,他们应该获得一定的权限。我可以根据sql选择来定义这两个组。但现在我想知道是否有一种方法可以在单个插入查询中执行此操作?到目前为止,我已经提出了以下解决方案,但这意味着运行x查询,其中x是我需要添加的权限数 为了增加复杂性,我可以说这组用户是根据他们已经分配的权限来选择的。因此,我们可以简单地表示为:向已经拥有权限PERM_1的用户添加一组权限,即PERM_1_1,PERM_1_2

目前我有3张桌子。假设用户、权限和表都链接它们,这是因为n对n的关系,可以称为usr_prm。现在我有了一组用户,他们应该获得一定的权限。我可以根据sql选择来定义这两个组。但现在我想知道是否有一种方法可以在单个插入查询中执行此操作?到目前为止,我已经提出了以下解决方案,但这意味着运行x查询,其中x是我需要添加的权限数

为了增加复杂性,我可以说这组用户是根据他们已经分配的权限来选择的。因此,我们可以简单地表示为:向已经拥有权限PERM_1的用户添加一组权限,即PERM_1_1,PERM_1_2

我现在正在使用PostgreSQL DB,但我希望有一个通用的解决方案,因为我们的应用程序还支持SQL Server和Oracle DBs用于某些客户机,在他们的DBs上使用此脚本可能也很方便

我目前使用的是什么:

将用户id、权限id插入usr\U prm 选择users.id,从name=PERM\u 1\u 1的权限中选择id 来自用户 usr_prm.user_id=users.id上的内部联接usr_prm permissions.id=usr\u prm.permission\u id上的内部联接权限 其中permissions.name=PERM_1 和 将用户id、权限id插入usr\U prm 选择users.id,从name=PERM\u 1\u 2的权限中选择id 来自用户 usr_prm.user_id=users.id上的内部联接usr_prm permissions.id=usr\u prm.permission\u id上的内部联接权限 其中permissions.name=PERM_1 和 这是你想要的吗

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表,除非在其他条件下需要它。

我知道应该有比我更好的方法,但不希望有这么简单的方法。它工作得很好。现在我才明白这里发生了什么顺便说一句,用户没有其他条件。