复制同一oracle SQL表中的行并更改某些列值

复制同一oracle SQL表中的行并更改某些列值,sql,oracle,sql-insert,Sql,Oracle,Sql Insert,我在oracle DB中有一个名为table1的表,如下所示: ID USERID FRUIT COLOR 1 10 APPLE BLUE 2 10 ORANGE RED 3 20 BANANA YELLOW 我想构建一个查询,该查询将: -从userid10中选择所有行,并将它们复制到同一个表中,保持除ID之外的所有字段不变(我想它应该自动递增?)。编辑:只要是DB列(不是用户创建的),增量部分就会自动递增 因此,我希望得到的结果是u

我在oracle DB中有一个名为table1的表,如下所示:

ID  USERID  FRUIT   COLOR
1   10      APPLE   BLUE
2   10      ORANGE  RED
3   20      BANANA  YELLOW
我想构建一个查询,该查询将: -从userid10中选择所有行,并将它们复制到同一个表中,保持除ID之外的所有字段不变(我想它应该自动递增?)。编辑:只要是DB列(不是用户创建的),增量部分就会自动递增

因此,我希望得到的结果是userID 20有userID 10行,如下所示:

ID  USERID  FRUIT   COLOR
1   10      APPLE   BLUE
2   10      ORANGE  RED
3   20      BANANA  YELLOW
4   20      APPLE   BLUE
5   20      ORANGE  RED
下面是我的试问——它会起作用吗

INSERT INTO table1
SELECT * FROM table1
WHERE USERID=10;

列出所需的列和值:

INSERT INTO table1(USERID, FRUIT, COLOR)
    SELECT 20, FRUIT, COLOR
    FROM table1
    WHERE USERID = 10;
如果插入时未自动生成
id
,则可以计算该值:

INSERT INTO table1(ID, USERID, FRUIT, COLOR)
    SELECT tt1.maxid + ROW_NUMBER() OVER (ORDER BY NULL) as ID,
           20, FRUIT, COLOR
    FROM table1 t1 CROSS JOIN
         (SELECT MAX(ID) as maxid FROM table1) tt1
    WHERE USERID = 10;

ID
列使用序列:

CREATE SEQUENCE table1__id__seq;
并将其用于所有插入

然后您可以使用:

INSERT INTO table1( id, userid, fruit, color )
  SELECT table1__id__seq.NEXTVAL,
         20,
         fruit,
         color
  FROM   table1
  WHERE  userid = 10;

我可以在表1(*)中插入
吗?
并且ID会自动增加吗?@lovemyjob-如果您要填充所有列,并且不使用默认值或
标识等,只需将
(a,b,c)
保留在外<代码>插入到表1中选择……
。但这有一个明显的弱点;如果表结构发生更改(移动或添加列),它不一定会执行您想要的操作。强烈建议指定列。@lovemyjob-这取决于表定义。
id
列是否定义为
IDENTITY
?是否有从序列自动填充的触发器?还是你自己负责管理身份证?(我们无法回答您的问题,您必须调查您的设置…)我调查了设置,当最终用户在数据库中创建新行时,ID(增加的数字)将自动创建。所以问题是-当我使用INSERT查询时,ID会增加吗?还是我应该谨慎行事,自己增加它,以防止在一个表中有相同的ID值?您使用的是Oracle的哪个版本?Oracle 10.2版