-1

我有一个奇怪的问题。我得到了一些 CSV 格式的城市、地区和国家的数据,并将它们导入 MySQL 表中。

我有 3 个表和它们的字段

1. City    : id, name, country_code, region_number
2. Region  : region_number, country_code, name
3. Country : country_code, name

现在事情变得有点复杂了,因为我在区域表中添加了一个自动生成的 id 列,所以国家 y 的区域 x 将是唯一的。

问题是:现在我正在尝试更新城市字段 region_number 以保存这个唯一值(区域中的新 id 列),这样我就可以建立关系城市->区域。

关系 region->country 或 country->region 是可以的。

是否可以编写一个更新查询来使用正确的值更新城市 region_code(或填充一些新列,例如 region_id)?

如果不是查询,我可以使用什么来将正确的值输入到城市表中?

我有大约 300 万条记录!

4

2 回答 2

1

如果我理解正确,我认为您正在寻找这样的东西:

UPDATE
  City inner join Region
  on City.country_code = Region.country_code
     and City.region_number = Region.region_number
SET
  City.new_column = Region.id

但是,由于 City 和 Region 之间已经存在关系,我不确定这是正确的做法,因为它会使表格不规范化。

于 2012-12-23T22:25:17.347 回答
1

现在我正在尝试更新城市字段 region_number 以不保存此唯一值

您可以做到这一点的唯一方法是 region_number 唯一标识每个区域 - 如果已经是这种情况,那么您通过创建冗余引用来浪费您的时间。虽然坦率地说,如果这些确实是您的表结构,那么没有理由使用代理键。如果没有理由使用代理键,那么 region 和 country 表就是多余的。

于 2012-12-23T22:33:05.600 回答