J'ai besoin de migrer les données d'une base de données vers une autre, les deux sont sur le même système local.
Les tables et les colonnes ont des noms différents et je ne dois pas migrer toutes les colonnes de l'ancienne base de données, donc
Select *
ne fonctionne pas pour moi.
INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1
mais tout ce que j'ai est un #1064 - Syntax Error
Quelle est l'erreur dans ma requête et comment puis-je résoudre ce problème?
Merci d'avance
Votre requête devrait ressembler à ceci:
INSERT INTO newDatabase.table1 (Column1, Column2)
SELECT column1, column2 FROM oldDatabase.table1;
METTRE À JOUR
Étant donné que cette réponse reçoit plus d'attention que prévu, je devrais développer cette réponse. Tout d’abord, la réponse elle-même n’est peut-être pas évidente, mais il n’est pas nécessaire que les colonnes portent le même nom. Donc, la suite suivra aussi (en supposant que les colonnes existent dans leurs tables respectives):
INSERT INTO newDatabase.table1 (Column1, Column2)
SELECT SomeOtherColumn, MoreColumns FROM oldDatabase.table1;
De plus, ils n'ont même pas besoin d'être de vraies colonnes dans la table. L'un des exemples de transformation de données que j'utilise souvent est:
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;
Donc, comme cela pourrait être plus évident maintenant, la règle est, tant que la requête SELECT renvoie le même nombre de colonnes que la requête INSERT, elle peut être utilisée à la place de VALUES.
Vous avez dit "Les noms des tables et des colonnes étaient différents", mais vous utilisiez toujours les mêmes noms. Essaye ça:
INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2)
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;
INSERT INTO db1.table SELECT * FROM db2.table;
Si vous souhaitez copier des données dans les mêmes tables de bases différentes.
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table
SELECT column_name FROM db1.table