复制同一oracle SQL表中的行并更改某些列值
我在oracle DB中有一个名为table1的表,如下所示:复制同一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
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版