我试图将丢失的行从一个表复制到另一个表,但前提是主键字段不存在。这两个表具有相同的列名,但是我没有列数和列名,也没有主键列名,所以它可以是"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完全相同
发布于 2019-05-25 13:29:59
您可以使用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)
发布于 2019-05-25 15:06:16
如果您只想忽略table1
中具有table2
中现有主键的行,那么最简单的方法是使用INSERT IGNORE
语法:
INSERT IGNORE INTO table2 SELECT * FROM table1;
请注意,如果任何唯一键(不仅是主关键字)中存在重复项,则会忽略并不插入行。
如果使用
IGNORE
修饰符,则会忽略执行INSERT
语句时发生的错误。例如,如果没有IGNORE
,则重复表中现有UNIQUE
索引或PRIMARY KEY
值的行会导致重复键错误,并且语句将中止。使用IGNORE
时,该行将被丢弃,并且不会发生错误。忽略的错误将生成警告。
还要注意,两个表中的列应该以相同的顺序定义。实际上,这些表应该具有完全相同的模式(具有相同数据类型、长度、字符集和排序规则的相同列)。
https://stackoverflow.com/questions/56305183
复制