2014-04-07 2 views
15

Potrzebuję przenieść dane z jednej bazy danych do drugiej, oba są w tym samym systemie lokalnym.MySQL Wstaw z jednej bazy danych w innej

tabele i kolumny dostaje różne nazwy i nie muszą migrować wszystkie kolumny ze starej bazy danych, więc

Select * nie działa dla mnie.

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

ale wszystko co mam to #1064 - Syntax Error

Co to jest błąd w mojej kwerendy i jak mogę to naprawić?

góry dzięki

+0

Może potrzebujesz spacji po nazwie tabeli, tuż przed ( – marcosh

+0

Twoja składnia MySQL SELECT jest niepoprawna Zgaduję, że nie przeczytałeś instrukcji (https://dev.mysql.com/doc/refman/ 5.0/en/select.html)? –

Odpowiedz

44

Zapytanie powinno iść tak:

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

UPDATE

Ponieważ ta odpowiedź jest coraz więcej uwagi niż ja nawet przewidywano, że należy poszerzyć tą odpowiedź . Po pierwsze, może nie być oczywiste z samej odpowiedzi, ale kolumny nie muszą mieć tej samej nazwy. Więc, po zadziała zbyt (zakładając, że kolumny istnieć w swoich tabelach):

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

Co więcej, nawet nie muszą być prawdziwe kolumny w tabeli. Jednym z przykładów przekształcania danych, które używam dość często jest:

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; 

Tak, jak to może być bardziej oczywiste teraz, regułą jest, tak długo jak kwerendy SELECT zwraca taką samą liczbę kolumn, które wstawiają potrzeb zapytań , może być użyty zamiast WARTOŚCI.

+0

Zadziałało, dzięki :) – KhorneHoly

3

Powiedziałeś "Tabele i kolumny mają różne nazwy", ale nadal używasz tych samych nazw. Spróbuj tego:

INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1; 
0
CREATE TABLE db2.table LIKE db1.table; 
INSERT INTO db2.table 
SELECT column_name FROM db1.table 
0
INSERT INTO db1.table SELECT * FROM db2.table; 

Jeśli chcesz skopiować dane do tych samych stołów o różnej db.