我需要将数据从一个数据库迁移到另一个数据库,两者都在同一本地系统上。
表和列的名称不同,我不能从旧数据库迁移所有列,因此
Select * 对我不起作用。
Select *
INSERT INTO newDatabase.table1(Column1, Column2); SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1
但我只有一个 #1064 - Syntax Error
#1064 - Syntax Error
我的查询中有什么错误,我该如何解决?
提前致谢
您的查询应如下所示:
INSERT INTO newDatabase.table1 (Column1, Column2) SELECT column1, column2 FROM oldDatabase.table1;
更新
由于这个答案的关注程度超出了我的预期,因此我应该扩展这个答案。首先,从答案本身看可能并不明显,但各列不必具有相同的名称。因此,以下操作也将起作用(假设这些列存在于各自的表中):
INSERT INTO newDatabase.table1 (Column1, Column2) SELECT SomeOtherColumn, MoreColumns FROM oldDatabase.table1;
此外,它们甚至不必是表中的真实列。我经常使用的数据转换示例之一是:
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;
因此,就像现在可能更加明显的那样,规则是,只要SELECT查询返回的行数与INSERT查询所需的列数相同,就可以使用它代替VALUES。