Oracle多个插入,不同的ID

Oracle多个插入,不同的ID,oracle,insert,Oracle,Insert,我想将一些数据从一个表移动到另一个表。我编写了一个我认为可以使用的查询,但在目标表中,有一列包含id。我希望插入的每一行都有一个不同的连续id。下面是一个简化的示例: Table1 Name Telephone Actie Peter 123456 Y Michael 111111 Y George 1234445 N Table2 Id Name Likes 1 Peter Books 2 Michael Books 我写的问题是: insert all into table2 (name

我想将一些数据从一个表移动到另一个表。我编写了一个我认为可以使用的查询,但在目标表中,有一列包含id。我希望插入的每一行都有一个不同的连续id。下面是一个简化的示例:

Table1
Name Telephone Actie
Peter 123456 Y
Michael 111111 Y
George 1234445 N

Table2
Id Name Likes
1 Peter Books
2 Michael Books
我写的问题是:

insert all into table2 (name, likes)
select all.name name, 'Books' likes, from (select o.name
  from table1 o where o.active='Y') all;
有没有办法生成连续的ID并使用insert all into查询?一个序列?如果可以用一个序列。。。有没有办法不按顺序来做

谢谢和问候

您可以使用ROWNUM:

insert into table2 (id, name, likes)
select ROWNUM, all.name name, 'Books' likes from (select o.name
  from table1 o where o.active='Y') all;
我不知道你为什么有子查询,也许你真正的查询更复杂?你可以写:

insert into table2 (id, name, likes)
select ROWNUM, o.name, 'Books' likes 
  from table1 o where o.active='Y';
您可以使用ROWNUM:

insert into table2 (id, name, likes)
select ROWNUM, all.name name, 'Books' likes from (select o.name
  from table1 o where o.active='Y') all;
我不知道你为什么有子查询,也许你真正的查询更复杂?你可以写:

insert into table2 (id, name, likes)
select ROWNUM, o.name, 'Books' likes 
  from table1 o where o.active='Y';

在Oracle中生成id的正确方法是使用序列

create sequence seq_table2_id nocache;
然后在插入call seq_table2_id.nextval时

insert into table2 (id, name, likes)
select seq_table2_id.nextval
,      o.name
,      'Books'
from   table1 o
where  o.active = 'Y'

就我个人而言,我使用触发器在插入时自动调用序列,但有些人不喜欢使用触发器。

在Oracle中生成id的正确方法是使用序列

create sequence seq_table2_id nocache;
然后在插入call seq_table2_id.nextval时

insert into table2 (id, name, likes)
select seq_table2_id.nextval
,      o.name
,      'Books'
from   table1 o
where  o.active = 'Y'

就我个人而言,我使用触发器在插入时自动调用序列,但有些人不喜欢使用触发器。

是的,正如你所说,我的查询确实更复杂。。。也许我举的例子不是最好的。我用ROWNUM重写了我的查询,它的工作方式和我想的一样!谢谢你的回答。是的,正如你所说,我的问题确实更复杂。。。也许我举的例子不是最好的。我用ROWNUM重写了我的查询,它的工作方式和我想的一样!感谢您的回答。答案很好,但我希望在不使用任何序列的情况下执行此操作,即使知道这是最佳解决方案。没有理由为一次性单会话插入创建序列。ROWNUM在这种情况下非常合适。答案很好,但我希望在不使用任何序列的情况下执行此操作,即使知道这是最佳解决方案。没有理由为一次性单会话插入创建序列。ROWNUM在这种情况下非常合适。