-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 の関係は OK です。

都市の region_code を更新する (または region_id などの新しい列を埋める) 更新クエリを正しい値で作成することは可能ですか?

クエリでない場合、都市テーブルに正しい値を取得するために何を使用できますか?

私は約300万件のレコードを持っています!

4

2 に答える 2

1

今、この一意の値を保持しないように都市フィールド region_number を更新しようとしています

これを行う唯一の方法は、 region_number が各リージョンを一意に識別する場合です。すでにそうである場合は、冗長な参照を作成して時間を無駄にしています。率直に言って、これらが実際にテーブル構造である場合、代理キーを使用する理由はありません。また、代理キーを使用する理由がない場合、地域と国のテーブルは冗長です。

于 2012-12-23T22:33:05.600 に答える
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 に答える