基于其他2个相关表更新表

时间:2012-12-23 22:14:44

标签: mysql relational-database

我有一个奇怪的问题。我以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列),因此我可以拥有关系city-> region。

关系区域 - >国家/地区 - >>区域正常。

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

如果不是查询,我可以使用什么来获取CITY表中的正确值?

我有300万条记录!

2 个答案:

答案 0 :(得分: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

但是,由于城市和地区之间已存在关系,我不确定这是否正确,因为它会使表格不规范化。

答案 1 :(得分:1)

  

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

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