Сначала вам нужно будет вручную создать таблицу, в которой есть все уникальные столбцы во всех ваших таблицах, поставить первичный ключ по электронной почте, base_name, location.
Основная проблема с этимПодход заключается в том, что строки, которые сопоставляются первичным ключом с одинаковыми столбцами, содержащими разные данные, будут перезаписаны самым последним обновлением.
Вы можете сгенерировать оператор вставки для каждой из ваших таблиц, выполнив следующие запросыпредоставит вам список столбцов для выбора, сравнив table1 с новой таблицей и обновляемыми столбцами (если не пустыми).
(измените номер таблицы ниже, чтобы сгенерировать данные для каждой из ваших таблиц)
SELECT GROUP_CONCAT(NVL(b.COLUMN_NAME,CONCAT('NULL AS ',a.column_name))) as sel_cols
FROM INFORMATION_SCHEMA.COLUMNS a
LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.column_name = b.column_name and b.table_name='table1' and b.table_schema = b.table_schema
WHERE a.table_name = 'new_table' AND b.table_schema = database()
для получения списка обновляемых столбцов
SELECT GROUP_CONCAT(CASE WHEN b.column_name IS NOT NULL THEN CONCAT(b.column_name,'=VALUES(',b.column_name,')') ELSE END) as upd_cols
FROM INFORMATION_SCHEMA.COLUMNS a
LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.column_name = b.column_name and b.table_name='table1' and b.table_schema = b.table_schema
WHERE a.table_name = 'new_table' AND b.table_schema = database()
Например:
col1, col2, NULL as col3
col1 = VALUES(col1), col2 = VALUES(col2)
теперь вставьте список столбцов и имя таблицы во вставку..
INSERT INTO new_table (select col1,col2,NULL as col3 FROM table1)
ON DUPLICATE KEY UPDATE col1 = VALUES(col1), col2 = VALUES(col2)
Должно быть легко изменить sql для генерации именно тех операторов, которые вам нужны, и для всех таблиц.
возможно, поставить столбец, которыйпокажет тот факт, что произошла перезапись и откуда исходный столбец, так что вы можете вручную разрешить конфликт