2016-03-08 3 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 

red lines можно копировать как из одной базы данных в другую, но order_items_id может быть увеличен с 10 больше, чем максимальный order_item_id в базе данных «CopyTo».

black lines Выделить все дубликаты сотрудников, где не указано имя сотрудника?

Not shown можно добавить как есть и увеличить order_items_id с 10 более, чем максимум order_items_id в 'copyTo ".

blue lines Является ли я членом по имени?

Sql fiddle link

Любые советы будут оценены.

+0

У вас есть алгоритмический способ зная, что делать с? В этом случае вы можете выполнить все действия менее чем за 4 SQL, всего. Else, делайте 'INSERT ... SELECT ...' по одному за раз. Вам нужна помощь при написании 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) 

Чтобы скопировать те, которые только в source к dest:

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 - существует в обеих таблицах идентификатор персонала не совпадает –

Смежные вопросы