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

时间:2018-02-14 11:40:30

标签: sql oracle sql-insert

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

ID  USERID  FRUIT   COLOR
1   10      APPLE   BLUE
2   10      ORANGE  RED
3   20      BANANA  YELLOW

我想构建一个查询: - 从userID 10中选择所有行并将它们复制到同一个表中,保持所有字段不受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;

2 个答案:

答案 0 :(得分:2)

列出所需的列和值:

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;

答案 1 :(得分:0)

使用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;