Як я можу об’єднати дві таблиці MySQL, що мають однакову структуру?
Первинні ключі двох таблиць зіткнуться, тому я це врахував.
Як я можу об’єднати дві таблиці MySQL, що мають однакову структуру?
Первинні ключі двох таблиць зіткнуться, тому я це врахував.
Відповіді:
Ви також можете спробувати:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
що дозволяє тим рядкам таблиці_1 замінити рядки таблиці_2, які мають відповідний первинний ключ, одночасно вставляючи рядки з новими первинними ключами.
Як варіант,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
оновить ті рядки, які вже є в table_1, відповідним рядком з table_2, одночасно вставляючи рядки з новими первинними ключами.
Це залежить від семантики первинного ключа. Якщо це просто автоінкремент, використовуйте щось на зразок:
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)
Syntax error, unexpected IDENT_QUOTED
пройшов через MySQL Workbench.
Якщо вам потрібно зробити це вручну, один раз:
По-перше, об’єднайте у тимчасову таблицю з чимось на зразок:
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;