Wie kann ich zwei MySQL-Tabellen mit derselben Struktur zusammenführen?
Die Primärschlüssel der beiden Tabellen werden zusammenstoßen, daher habe ich dies berücksichtigt.
Wie kann ich zwei MySQL-Tabellen mit derselben Struktur zusammenführen?
Die Primärschlüssel der beiden Tabellen werden zusammenstoßen, daher habe ich dies berücksichtigt.
Antworten:
Sie können auch versuchen:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
Dadurch können die Zeilen in Tabelle_1 die Zeilen in Tabelle_2 ersetzen, die einen passenden Primärschlüssel haben, während weiterhin Zeilen mit neuen Primärschlüsseln eingefügt werden.
Alternative,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
aktualisiert die bereits in Tabelle_1 enthaltenen Zeilen mit der entsprechenden Zeile aus Tabelle_2, während Zeilen mit neuen Primärschlüsseln eingefügt werden.
Dies hängt von der Semantik des Primärschlüssels ab. Wenn es sich nur um eine automatische Inkrementierung handelt, verwenden Sie Folgendes:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Wenn PK etwas bedeutet, müssen Sie einen Weg finden, um zu bestimmen, welcher Datensatz Priorität haben soll. Sie können eine Auswahlabfrage erstellen, um zuerst Duplikate zu finden (siehe Antwort von cpitis ). Entfernen Sie dann diejenigen, die Sie nicht behalten möchten, und verwenden Sie die obige Einfügung, um verbleibende Datensätze hinzuzufügen.
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
sowieso durch MySQL Workbench kommen.
Wenn Sie dies einmal manuell tun müssen:
Führen Sie zunächst eine temporäre Tabelle mit folgenden Elementen zusammen:
create table MERGED as select * from table 1 UNION select * from table 2
Identifizieren Sie dann die Primärschlüsseleinschränkungen mit etwas wie
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Wobei PK das Primärschlüsselfeld ist ...
Löse die Duplikate.
Benennen Sie die Tabelle um.
[bearbeitet - Klammern in der UNION-Abfrage entfernt, was den Fehler im Kommentar unten verursacht hat]
Nicht so kompliziert, wie es sich anhört ... Lassen Sie einfach den doppelten Primärschlüssel aus Ihrer Abfrage heraus ... das funktioniert bei mir!
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
Sie könnten ein Skript schreiben, um die FKs für Sie zu aktualisieren. Schauen Sie sich diesen Blog an: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Sie haben ein cleveres Skript, um mithilfe der information_schema-Tabellen die "id" -Spalten abzurufen:
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;