我有一个旧数据库(使用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;
答案 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
插入国家/地区表,以获取更多信息。