我有两个具有相同元素的表,唯一不同的是有'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(将生成为自动增量)。
有没有可能。
答案 0 :(得分:0)
如果您不想提及列名但想要复制all,则尝试将所有数据复制到临时表中,然后删除pk_id字段,然后将其余字段复制到所需的表中,最后删除临时表。
请参阅我对类似查询的回答之一: Mysql: Copy row but with new id
我们可以使用临时表首先从主表缓冲,然后再用它复制到主表。我们可以从临时表中删除pk字段,并将所有其他字段复制到第二个表。
参考Tim Ruehsen中referred 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);