it-swarm.com.de

MySQL Insert In aus einer Datenbank in eine andere

Ich muss Daten von einer Datenbank in eine andere migrieren, beide befinden sich auf demselben lokalen System.

Die Tabellen und Spalten haben unterschiedliche Namen, und ich darf nicht alle Spalten aus der alten Datenbank migrieren 

Select * funktioniert bei mir nicht.

INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1

aber alles was ich habe ist ein #1064 - Syntax Error

Was ist der Fehler in meiner Abfrage und wie kann ich das beheben?

Danke im Voraus

23
KhorneHoly

Ihre Anfrage sollte so aussehen:

INSERT INTO newDatabase.table1 (Column1, Column2) 
SELECT column1, column2 FROM oldDatabase.table1;

UPDATE 

Da diese Antwort mehr Aufmerksamkeit bekommt, als ich überhaupt erwartet hatte, sollte ich diese Antwort erweitern. Zunächst ist es vielleicht aus der Antwort selbst nicht ersichtlich, aber die Spalten müssen nicht denselben Namen haben. Folgendes funktioniert also auch (vorausgesetzt, die Spalten sind in ihren jeweiligen Tabellen vorhanden):

INSERT INTO newDatabase.table1 (Column1, Column2) 
SELECT SomeOtherColumn, MoreColumns FROM oldDatabase.table1;

Außerdem müssen sie nicht einmal echte Spalten in der Tabelle sein. Ein Beispiel für die Umwandlung von Daten, die ich häufig verwende, ist:

INSERT INTO newDatabase.users (name, city, email, username, added_by) 
SELECT CONCAT(first_name, ' ', last_name), 'Asgard', CONCAT(first_name,'@gmail.com'), CONCAT(first_name,last_name), 'Damir' FROM oldDatabase.old_users;

Da dies jetzt offensichtlicher ist, gilt die Regel: Solange die SELECT-Abfrage dieselbe Anzahl von Spalten zurückgibt, die die INSERT-Abfrage benötigt, kann sie anstelle von VALUES verwendet werden.

67
Damir Kasipovic

Sie sagten "Die Tabellen und Spalten haben unterschiedliche Namen", verwendeten jedoch immer noch dieselben Namen. Versuche dies:

INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;
4
Racil Hilan
INSERT INTO db1.table SELECT * FROM db2.table;

Wenn Sie Daten in dieselben Tabellen unterschiedlicher DB kopieren möchten.

1
Priyank Kotiyal
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table 
SELECT column_name FROM db1.table
0
Mayuri