2016-03-08 121 views
1

我们有两个需要合并的Mysql数据库(Myisam)。它们都具有相同的结构。目标是使用一个查询执行并合并,将所有项目从一个数据库复制到另一个数据库。合并具有重复主键和外键的数据库

方案如下:

Red lines - Duplicate staff with same staff_id in both databases. 
Blue lines - Duplicate staff with different staff_id in both databases. 
Black line - Different staff with the same staff_id in both databases. 
Not shown - Different staff with unique staff_id 

​​可以被复制为是从一个数据库到另一个,但order_items_id能够以比在“CopyTo从”数据库的最大ORDER_ITEM_ID 10更增大。

black lines选择员工姓名不一样的所有重复员工?

Not shown我们可以按原样追加并增加order_items_id,其中'copyTo'数据库中的最大order_items_id大于10。

blue lines我加入员工姓名吗?

Sql fiddle link

任何意见,将不胜感激。

+0

你有知道哪个做什么用的算法呢?在这种情况下,您可以在总共少于4个SQL中执行所有操作。否则,一次一个“插入...选择...”。你在拼写SQL时需要帮助吗? –

+0

是的。@ RickJames AKA MR拼写。我需要知道如何解决'在两个数据库中使用不同的staff_id复制员工'我是否加入员工姓名? –

回答

2
SELECT ... 
    FROM db1.tbl a 
    JOIN db2.tbl b ON a.staff_name = b.staff_name -- exists in both tables 
SELECT ... 
    FROM db1.tbl a 
    JOIN db2.tbl b ON a.staff_name = b.staff_name 
    WHERE db1.Staff_id != db2.Staff_id -- exists in both tables staff id's not matching 

SELECT ... 
    FROM db1.tbl a 
    LEFT JOIN db2.tbl b ON a.staff_name = b.staff_name 
    WHERE b.staff_id IS NULL -- missing from b (exists only in a) 

SELECT ... 
    FROM db1.tbl b 
    LEFT JOIN db2.tbl a ON a.staff_name = b.staff_name 
    WHERE a.staff_id IS NULL -- missing from a (exists only in b) 

要复制那些只在sourcedest

SELECT @max := MAX(staff_id) + 10 FROM db1.tbl; -- destination 
INSERT INTO db1.tbl 
    SELECT @max + source.staff_id, source.name, ... 
     FROM db2.tbl AS source 
     LEFT JOIN db1.tbl AS dest ON source.staff_name = dest.staff_name 
     WHERE dest.staff_id IS NULL 
+0

SELECT ... FROM db1.tbl a JOIN db2.tbl b ON a.staff_name = b.staff_name WHERE db1.Staff_id!= db2.Staff_id - 两个表中都存在员工ID不匹配 –