4

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

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

关于这是否可以使用 SQL 的任何想法?

我的数据库是 ingres 数据库

提前致谢

4

3 回答 3

5

当然,这样的事情应该有效:

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

只需将SomeQuestionIdand替换SomeNewQuestionId为适当的值。

于 2013-11-11T23:03:54.843 回答
3

这是一个简单的选择查询。

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

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

于 2013-11-11T23:04:10.337 回答
2

快进两年.... :) 我认为这是最好和最简单的方法。使用主键从同一张表中插入一行数据会导致错误,因为每行的主键都是唯一的:设 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;

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

于 2016-03-08T03:09:04.010 回答