我在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;
答案 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;