需要使用合并查询插入数据

时间:2015-10-16 07:39:28

标签: sql oracle

我有一个包含2列function rolerole的表function。两者都是主键。

数据如下

role         function

analyst      execute
BAU          execute
SYS          execute
SYS          create

我希望execute函数的所有角色都具有create函数。

如何通过SQL查询实现这一目标?

我的输出应该像

role           function

analyst      execute
analyst      create
BAU          execute
BAU          create
SYS          execute
SYS          create

请帮忙!

2 个答案:

答案 0 :(得分:0)

  

两者都是主键。

这是不可能的。一个表最多只能有一个主键。(但是,列的组合可能是

即使你有一个作为主键,你也不能在表中插入重复的值。

最后尝试避免在数据类型为varchar或text的列上创建主键。

您还可以使用简单的insert语句在表中插入数据,如下所示:

insert into myTable(`role`,`function`)
values('analyst','execute')

请注意,角色和功能是某些数据库的保留关键字。所以你需要注意它并使用正确的语法来克服它。就像SQL Server中的Mysql。[]的反引号一样。

答案 1 :(得分:0)

ANSI SQL兼容的答案,也应该适用于Oracle:

insert into function_role
    select role, 'create' from function_role f1
    where "function" = 'execute'
      and not exists (select 1 from function_role f2
                      where f2.role = r1.role
                        and f2."function" = 'create')

由于function是ANSI SQL中的保留字,因此它被分隔为"function"