Sql 将数据从表复制到具有不同键的同一表中

Sql 将数据从表复制到具有不同键的同一表中,sql,ingres,Sql,Ingres,我很好奇是否可以从表中获取数据,并复制它,但分配一个新的主键 例如,我希望获取具有列question_id的数据,该列充当表的唯一键,并将具有该question_id的表中的所有数据复制到具有新question_id的同一个表中 关于使用SQL是否可以实现这一点,您有什么想法吗 我的数据库是安格尔数据库 提前感谢当然,这样的方法应该可以: INSERT INTO YourTable (Question_Id, OtherField,...) SELECT SomeNewQuestionId, O

我很好奇是否可以从表中获取数据,并复制它,但分配一个新的主键

例如,我希望获取具有列question_id的数据,该列充当表的唯一键,并将具有该question_id的表中的所有数据复制到具有新question_id的同一个表中

关于使用SQL是否可以实现这一点,您有什么想法吗

我的数据库是安格尔数据库


提前感谢

当然,这样的方法应该可以:

INSERT INTO YourTable (Question_Id, OtherField,...)
SELECT SomeNewQuestionId, OtherField,...
FROM YourTable
WHERE Question_Id = SomeQuestionId

只需用适当的值替换SomeQuestionId和SomeNewQuestionId。

这是一个简单的select查询

insert into mytable
 (field2, field3, etc)
select field2, field3, etc
from mytable
where whatever.

这假设字段2和3都不是主键,并且您有一个自动增量表。

快进两年….: 我认为这是最好最简单的方法。使用主键插入同一表中的数据行将导致错误,因为每行的主键都是唯一的:让question_id=100

INSERT INTO MyTable SELECT * FROM MyTable Where question_id=100;
在PostgreSQL中:

ERROR:  duplicate key value violates unique constraint "MyTable_pkey"
DETAIL:  Key (question_id)=(100) already exists.
避免重复键值非常简单:

INSERT INTO MyTable SELECT (SELECT MAX(question_id)+1),Column1,Column2,etc FROM MyTable Where question_id=100;

通过使用MAXquestion_id+1,您将递增MyTable的question_id主键的最大值,然后使用唯一的question_id值将数据添加/复制到新行。

是的,但这是用于什么数据库的?它是用于ingres数据库的。对此,请确定。insert语句是我想要的新数据,而select语句则来自旧数据,在where子句中,我必须使QUOTE\u id=我的旧问题\u id,SOMEQUOTE\u id=新问题\u id。@John-听起来不错。看这个小提琴演示:-致以最良好的祝愿。小提琴将帮助我很多。现在,如果我的新问题\u id已经生成,那么它将是该人的预生成问题集编号,看起来会是什么样子。@John-太好了,很高兴我能帮上忙:DI做到了这一点。'代码“创建表YourTable Question\u Id int,OtherField varchar10;在表中插入值1“Hello”;在表中插入值2“bugger”;在表中插入值3;在表中插入问题Id,其他字段从表中选择3,其他字段,其中问题Id=1“代码”,它生成了2行,其中3作为问题Id。但是,我想用提供的数据覆盖第3行。我的表已经生成了新的问题Id。因此,我想获取旧数据,并将其复制到带有预生成问题的行中!谢谢+1.