我试图将丢失的行从一个表复制到另一个表,但前提是主键字段不存在。两个表都具有相同的列名,但我没有列数及其名称,也没有主键列名,因此它可以是“ ID”或其他任何名称。让我用一个例子来解释:
表1:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , England , London , ...
2 , France , Paris , ...
3, Italy , Rome , ...
4 , Germany , Berlin , ...
表2:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , Whatever , Whatever , ...
2 , Whatever , Whatever , ...
我想将第3行和第4行复制到表2中,这样结果将是:
表2:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , Whatever , Whatever , ...
2 , Whatever , Whatever , ...
3 , Italy , Rome , ...
4 , Germany , Berlin , ...
我尝试过
REPLACE INTO table1 SELECT * FROM table2;
但这将替换整个表,即表2变得与表1完全相同
答案 0 :(得分:0)
您可以使用insert . . . select
:
insert into table2 ( col1, col2 . . . )
select t1.col1, t1.col2, t1.col3, . . .
from table1 t1
where not exists (select 1 from table2 t2 where t2.id = t1.id)
答案 1 :(得分:0)
如果您只想忽略table1
中具有主键的table2
中的行,那么最简单的方法是使用INSERT IGNORE
语法:
INSERT IGNORE INTO table2 SELECT * FROM table1;
请注意,如果任何UNIQUE KEY(不仅是PRIMARY)中有重复项,则将忽略该行并将其插入。
如果使用
IGNORE
修饰符,则在执行INSERT
语句将被忽略。例如,在没有IGNORE
的情况下, 复制表中现有的UNIQUE
索引或PRIMARY KEY
值 导致重复键错误,并且语句中止。用IGNORE
,该行将被丢弃,并且不会发生错误。忽略的错误 而是生成警告。
还请注意,两个表中的列应以相同的顺序定义。实际上,这些表应该具有完全相同的架构(具有相同数据类型,长度,字符集和排序规则的相同列)。