我有这个问题:
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;
答案 0 :(得分:1)
world_cities
中有6条记录,城市为“rosemount”,但您有多个状态,这些状态属于与这些城市相同的国家/地区。例如,美国底特律MI与美国所有其他州是同一个国家。所以我希望在我的例子中有300 = 6 * 50的东西。
您很可能想要加入其他条件:wc.country_id = s.country_id AND wc.state_id = s.state_id
。查看您的架构,无法确定城市所属的州。您需要创建一个world_cities.state_id列。
答案 1 :(得分: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'
如果某个城市位于美国,那么您可能有50个(或57个)符合国家/地区ID的州。