从旧数据库传输数据时如何在新数据库中填充新列

时间:2019-12-09 18:54:01

标签: mysql mariadb

我有一个旧数据库(使用MariaDB),我必须创建一个新数据库,该数据库几乎相同,但有一些区别,而且我必须将旧数据库中的所有数据插入新数据库中。我已经用所有相等的数据填充了新数据,但是我一直坚持将“新”数据放入其中。

更改是在旧数据库中,在多个表中都有包含国家/地区名称的列,但是在新数据库中,Country有其自己的表,因此,不是列中的国家/地区名称,而是外键国家/地区表中的CountryID。

所以问题是我必须用新的Country CountryID填充新列CountryID。例如,如果旧数据库中客户表中的国家/地区字段是USA,则当我转换数据时,不必将USA放到新的Country表中,而是找到与USA相等的CountryID,然后输入字段中的ID。 (这样的事情)

Old Customers Table
--------------------
Country
USA
Canada



New Customers Table
-------------------
CountryID
3
7

CountryTable
----------
CountryID                    CountryName
3                            USA
7                            Canada

我知道这可能只是带有某些条件的简单插入,但无法找出正确的语法。

我尝试了类似于以下内容的不同插入语句,但是不断出错:

insert into newDatabase.customers(CountryID)
     select oldDatabase.customers.Country
     from oldDatabase.customers
     where oldDatabase.customers.country = newDatabase.countryTable.CountryName;
insert into newDatabase.customers(CountryID)
     select oldDatabase.customers.Country
     from oldDatabase.customers
     inner join newDatabase.countryTable as c on c.countryName = oldDatabase.customers.Country
     where oldDatabase.customers.country = newDatabase.countryTable.countryName;

1 个答案:

答案 0 :(得分:0)

最终目标是要将CountryTable中的ID插入新的customers表,这意味着您将需要该表。您要插入旧客户表中的数据,因此看起来像这样:

INSERT INTO newdb.customers(CountryID)
SELECT ct.CountryID
  FROM olddb.customers as oldc
       INNER JOIN newdb.country_table as ct
               ON ct.CountryName = oldc.Country;

您不需要WHERE子句,因为您没有在尝试过滤旧客户表中的行。您只需要将国家/地区表中的ID与您的旧客户表进行映射即可。因此,您要在国家/地区名称上JOIN插入国家/地区表,以获取更多信息。