0

私はこのクエリを持っています:

SELECT wc.city, wc.country_id, wc.latitude, wc.longitude FROM 
world_cities wc
-- left join states s on wc.country_id = s.country_id
where wc.city = 'rosemount'

それで6つの結果(私が欲しいもの)を取得します。3行目のコメントを外すと、150の結果が得られます。3行目のコメントを外すと、結果が増えますが、それでも6行しか得られないのではないでしょうか。ここで何かが足りないような気がします...

mysql> describe states;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| state_id   | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| country_id | tinyint(3) unsigned | YES  |     | NULL    |                |
| state_name | char(15)            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

世界の都市

mysql> describe world_cities;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| city_id     | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| state_id    | int(11)             | YES  |     | 0       |                |
| country_id  | tinyint(3) unsigned | YES  | MUL | NULL    |                |
| country     | char(2)             | YES  |     | NULL    |                |
| city        | char(60)            | YES  | MUL | NULL    |                |
| accent_city | char(60)            | YES  |     | NULL    |                |
| region      | int(11)             | YES  |     | NULL    |                |
| population  | int(11)             | YES  |     | NULL    |                |
| latitude    | decimal(9,6)        | YES  |     | NULL    |                |
| longitude   | decimal(9,6)        | YES  |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)

編集
これを実行しました。world_citiesテーブルのstate_idがかなり更新されます。

update world_cities wc 
left join zipcodes z on wc.city = z.city 
left join cities c on z.state = c.city_name
left join states s on z.state = s.state_name 
set wc.state_id = s.state_id 
where wc.country_id = 236
and abs(round(z.lat, 2) - round(wc.latitude, 2)) between 0 and 1
and abs(round(z.log, 2) - round(wc.longitude, 2)) between 0 and 1;
4

2 に答える 2

1

world_cities「rosemount」の都市で6つのレコードがありますが、これらの各都市と同じ国に属する多くの州があります。たとえば、米国ミシガン州デトロイトは、米国の他のすべての州と同じ国です。したがって、私の例では300 = 6*50のようなものを期待します。

ほとんどの場合、別の条件で参加したいと考えていますwc.country_id = s.country_id AND wc.state_id = s.state_id。スキーマを見ると、都市がどの州に属しているかを特定する方法はありません。world_cities.state_id列を作成する必要があります。

于 2013-03-23T23:16:51.643 に答える
1

あなたは間違った分野に参加していると思います。これを試して:

SELECT wc.city, wc.country_id, wc.latitude, wc.longitude FROM 
world_cities wc
-- left join states s on wc.state_id = s.state_id
where wc.city = 'rosemount'

都市が米国内にある場合、国 ID に一致する州が 50 (または 57) ある可能性があります。

于 2013-03-23T23:18:18.927 に答える