小智 121
你也可以尝试:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
Run Code Online (Sandbox Code Playgroud)
允许table_1中的那些行取代table_2中具有匹配主键的那些行,同时仍然插入具有新主键的行.
或者,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
Run Code Online (Sandbox Code Playgroud)
将使用table_2中的相应行更新table_1中已有的行,同时插入带有新主键的行.
Mil*_*kov 38
它取决于主键的语义.如果它只是自动增量,那么使用如下:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Run Code Online (Sandbox Code Playgroud)
如果PK意味着什么,你需要找到一种方法来确定哪个记录应该具有优先权.您可以创建一个选择查询以首先查找重复项(请参阅cpitis的回答).然后消除您不想保留的那些并使用上面的插入来添加剩余的记录.
Qua*_*noi 21
INSERT
INTO first_table f
SELECT *
FROM second_table s
ON DUPLICATE KEY
UPDATE
s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
Run Code Online (Sandbox Code Playgroud)
Căt*_*tiș 15
如果您需要手动执行,一次:
首先,合并到一个临时表中,例如:
create table MERGED as select * from table 1 UNION select * from table 2
Run Code Online (Sandbox Code Playgroud)
然后,用类似的东西识别主键约束
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
PK是主要关键领域......
解决重复问题.
重命名表格.
[编辑 - 在UNION查询中删除括号,这导致下面评论中的错误]
并不像听起来那么复杂....只需将重复的主键从查询中删除......这对我有用!
INSERT INTO
Content(
`status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
)
SELECT `status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
FROM
Content_Images
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174814 次 |
| 最近记录: |