我有一个包含2列function role
和role
的表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
请帮忙!
答案 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"
。