繁体   English   中英

如何合并两个MySQL表?

[英]How can I merge two MySQL tables?

如何合并两个具有相同结构的MySQL表?

这两个表的主键会发生冲突,所以我考虑到了这一点。

你也可以尝试:

INSERT IGNORE
  INTO table_1 
SELECT *
  FROM table_2
     ;

允许table_1中的那些行取代table_2中具有匹配主键的那些行,同时仍然插入具有新主键的行。

或者,

REPLACE
   INTO table_1
 SELECT *
   FROM table_2
      ;

将使用table_2中的相应行更新table_1中已有的行,同时插入带有新主键的行。

它取决于主键的语义。 如果它只是自动增量,那么使用如下:

insert into table1 (all columns except pk)
select all_columns_except_pk 
from table2;

如果PK意味着什么,你需要找到一种方法来确定哪个记录应该具有优先权。 您可以创建一个选择查询以首先查找重复项(请参阅cpitis的回答 )。 然后消除您不想保留的那些并使用上面的插入来添加剩余的记录。

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)

如果您需要手动执行,一次:

首先,合并到一个临时表中,例如:

create table MERGED as select * from table 1 UNION select * from table 2

然后,用类似的东西识别主键约束

SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1

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

您可以编写一个脚本来为您更新FK ..请查看此博客: http//multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/

他们有一个聪明的脚本来使用information_schema表来获取“id”列:

SET @db:='id_new'; 

select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;

select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where table_schema=@db and column_name like '%id' into outfile 'update_ids.sql';

use id_new
source update_ids.sql;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM