Bagaimana cara menggabungkan dua tabel MySQL yang memiliki struktur yang sama?
Kunci utama dari dua tabel akan bentrok, jadi saya telah memperhitungkannya.
Bagaimana cara menggabungkan dua tabel MySQL yang memiliki struktur yang sama?
Kunci utama dari dua tabel akan bentrok, jadi saya telah memperhitungkannya.
Jawaban:
Anda juga bisa mencoba:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
yang memungkinkan baris tersebut di tabel_1 untuk menggantikan baris di tabel_2 yang memiliki kunci utama yang cocok, sambil tetap menyisipkan baris dengan kunci utama baru.
Kalau tidak,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
akan memperbarui baris yang sudah ada di table_1 dengan baris yang sesuai dari table_2, sambil menyisipkan baris dengan kunci primer baru.
Itu tergantung pada semantik kunci utama. Jika itu hanya autoincrement, maka gunakan sesuatu seperti:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Jika PK berarti sesuatu, Anda perlu menemukan cara untuk menentukan rekaman mana yang harus diprioritaskan. Anda dapat membuat kueri pemilihan untuk menemukan duplikat terlebih dahulu (lihat jawaban dengan cpitis ). Kemudian hilangkan yang tidak ingin Anda simpan dan gunakan sisipan di atas untuk menambahkan catatan yang tersisa.
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
- melalui MySQL Workbench.
Jika Anda perlu melakukannya secara manual, satu kali:
Pertama, gabungkan dalam tabel sementara, dengan sesuatu seperti:
create table MERGED as select * from table 1 UNION select * from table 2
Kemudian, identifikasi kendala kunci utama dengan sesuatu seperti
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Di mana PK adalah bidang kunci utama ...
Pecahkan duplikat.
Ubah nama tabel.
[diedit - tanda kurung yang dihapus dalam kueri UNION, yang menyebabkan kesalahan pada komentar di bawah]
Tidak serumit kedengarannya .... Biarkan saja kunci utama duplikat dari kueri Anda .... ini berfungsi untuk saya!
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
Anda dapat menulis skrip untuk memperbarui FK untuk Anda .. lihat blog ini: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Mereka memiliki skrip pintar untuk menggunakan tabel information_schema untuk mendapatkan kolom "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;