将一个表的内容复制到另一个表,保留主要元素

时间:2013-12-19 11:39:08

标签: mysql

我有两个具有相同元素的表,唯一不同的是有'id'是主键和自动增量。

Table1 | Table2
id1(PK)| id2(PK)
col1   | col1
col2   | col2
col3   | col3

我知道一些快速的方法,比如,

INSERT INTO table2 SELECT * FROM table1 where id1 = 2

使用这种方法时,table2的内容有id2 = 2,因为它将所有字段从table1直接复制到table2,以限制它, 我也可以使用方法

INSERT INTO table2(col1,col2,col3) SELECT col1,col2,col3 FROM table1 WHERE id1 = 2

这种方式适用于短表,但我的表中有很多列。

我需要一种快速的方法将所有列从table1复制到table2,而主要的列是id2,因为它是自动增量的。

就像我想要将table1中的指定行复制到具有不同id2的table2(将生成为自动增量)。

有没有可能。

2 个答案:

答案 0 :(得分:0)

如果您不想提及列名但想要复制all,则尝试将所有数据复制到临时表中,然后删除pk_id字段,然后将其余字段复制到所需的表中,最后删除临时表。

请参阅我对类似查询的回答之一: Mysql: Copy row but with new id


我们可以使用临时表首先从主表缓冲,然后再用它复制到主表。我们可以从临时表中删除pk字段,并将所有其他字段复制到第二个表。

参考Tim Ruehsenreferred posting的答案:

CREATE TEMPORARY TABLE tmp_table SELECT * from first_table WHERE ...;
ALTER TABLE tmp_table drop pk_id; # drop autoincrement field
# UPDATE tmp_table SET ...; # just needed to change other unique keys
INSERT INTO second_table SELECT 0, tmp_table.* FROM tmp_table;
DROP TABLE tmp_table;

答案 1 :(得分:-1)

复制table1中的所有行,除了table2中具有相同id的行

INSERT INTO table2(col1, col2, col3)
SELECT t1.col1, t1.col2, t1.col3    
FROM table1 t1
WHERE t1.id1 not in (SELECT id2 FROM table2);