SQL根据一个属性有条件地多次插入

SQL根据一个属性有条件地多次插入,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有两个已经有数据的表和一个空关系表: 用户(idU,idCreator,作业,…) 权限(idP,名称) 用户权限(idU,idP,idCreator,…) 对于用户中的每一行和根据User.job值,我想插入用户权限值(aPermID、idU、idCreator等),其中idU是自己的用户ID,idCreator是用户的ID创建者 例如: 如果User.job='Comm',我将插入用户权限值(100,User.idU,User.idCreator,…) 如果User.job='Dev

我有两个已经有数据的表和一个空关系表:

用户(idU,idCreator,作业,…)

权限(idP,名称)

用户权限(idU,idP,idCreator,…)


对于用户中的每一行和根据User.job值,我想
插入用户权限值(aPermID、idU、idCreator等)
,其中
idU是自己的用户ID
idCreator是用户的ID创建者


例如:

  • 如果User.job='Comm',我将
    插入用户权限值(100,User.idU,User.idCreator,…)
  • 如果User.job='Dev',我将
    插入用户权限值(150,User.idU,User.idCreator,…)
    插入用户权限值(200,User.idU,User.idCreator,…)

我不知道我怎么能做到。我正在使用Oracle 11g版


idCreator属性的澄清

每个用户都是由另一个用户创建的 一个。
User\u权限
也是由某人授予的(这就是为什么会有 一个
idCreator(也是

在这里,我试图恢复旧数据,因此默认情况下,我选择
User\u权限.idCreator
User.idCreator
相同


您需要一些将作业映射到Permid的表。有点

insert into User_Permission(idU#, idP#, idCreator, ...)
select map.permID, u.idU, u.idCreator, ...
from User u
join ( -- job class to permid mapping
    select  'Comm' class, 100 permID  from dual 
    union all
    select 'Dev', 150 from dual 
    union all
    select 'Dev', 200 from dual 
) map on map.class= u.job

您需要一些将作业映射到Permid的表。有点

insert into User_Permission(idU#, idP#, idCreator, ...)
select map.permID, u.idU, u.idCreator, ...
from User u
join ( -- job class to permid mapping
    select  'Comm' class, 100 permID  from dual 
    union all
    select 'Dev', 150 from dual 
    union all
    select 'Dev', 200 from dual 
) map on map.class= u.job

请更新您的问题,以提供一些与预期结果一致的示例数据,以便我们有机会帮助您。通常,您可以从插入
T1
记录的任何位置执行此操作(或者可能通过
T1
上的
AFTER INSERT
触发器)。为什么两个表中都有
number
?另外,一般来说,对于必须具有特定值的列(
100
150
),您不应该使用
id
),您应该使用业务/域实体声明为的任何内容(您可能会这样做)。@Mistalis实际上不是这样。用户和权限中的数据是什么,而不是生成要插入到用户权限中的结果?也就是说,为什么一行“100”代表“Comm”,两行“150”和“200”代表“Dev”?请记住,我们看不到您的数据或表格,因此您需要提供尽可能多的有关您的情况的信息。@Mistalis(关于一个问题,该问题提供了适当的样本数据以及他们的预期输出,使我们能够看到他们正在处理什么以及他们想要实现什么)用户是我从旧项目中恢复的表。我想在User_Permission中插入一些内容,根据那里的作业为用户提供一些默认权限。某些作业可以授予多个权限(例如,此处为
Dev
)。但别担心:一行就可以了,可以复制它(我只有4个不同的权限,每个权限我可以提出1个请求):)请更新您的问题,以提供一些与预期结果一致的示例数据,以便我们有机会帮助您。通常,您可以从插入
T1
记录的任何位置执行此操作(或者可能通过
T1
上的
AFTER INSERT
触发器)。为什么两个表中都有
number
?另外,一般来说,对于必须具有特定值的列(
100
150
),您不应该使用
id
),您应该使用业务/域实体声明为的任何内容(您可能会这样做)。@Mistalis实际上不是这样。用户和权限中的数据是什么,而不是生成要插入到用户权限中的结果?也就是说,为什么一行“100”代表“Comm”,两行“150”和“200”代表“Dev”?请记住,我们看不到您的数据或表格,因此您需要提供尽可能多的有关您的情况的信息。@Mistalis(关于一个问题,该问题提供了适当的样本数据以及他们的预期输出,使我们能够看到他们正在处理什么以及他们想要实现什么)用户是我从旧项目中恢复的表。我想在User_Permission中插入一些内容,根据那里的作业为用户提供一些默认权限。某些作业可以授予多个权限(例如,此处为
Dev
)。但别担心:一行就可以了,可以复制它(我只有4个不同的权限,每个权限我可以提出1个请求):)谢谢,这对我有帮助!谢谢,这对我有帮助!