【发布时间】:2018-01-17 21:30:38
【问题描述】:
大家:
我完全被这个问题所困扰。我尝试将条件添加为 WHERE 语句、SELECT 语句中的 IF 函数以及加入时的 ON 语句。这些都没有产生我想要的结果。
我需要什么:特定位置的 0.5 度纬度和 0.5 度经度范围内的城市列表。
我得到了什么:两张表 - 一张包含特定位置列表,另一张包含美国人口普查所规定的城市列表。
表 1 包括:
Location Address
City
State
Location Latitude
Location Longitude
位置数据示例:
Street City State Latitude Longitude
774 Emerson Street Palo Alto CA 37.44239044 -122.15956879
表 2 是美国人口普查数据,包括:
City
State
City Latitude
City Longitude
示例城市数据:
City State Latitude Longitude
Palo Alto CA 37.44188309 -122.14302063
Mountain View CA 37.38605118 -122.08385468
Sunnyvale CA 37.36883 -122.0363496
例如,如果我在加利福尼亚州帕洛阿尔托有一个位置,我想要看起来像这样的东西:
Location City State
Palo Alto CA Palo Alto CA
Palo Alto CA Mountain View CA
Palo Alto CA Sunnvyale CA
我试过了:
SELECT d.`City`
,d.`State`
,l.`City`
,l.`StateAbbreviation`
FROM `LocationDirectoryRevised` AS d
LEFT JOIN
`LatLong` AS l
ON d.`City` = l.`City` AND d.`State` = l.`StateAbbreviation`
WHERE l.`Latitude` BETWEEN (d.`Latitude` + 0.5) AND (d.`Latitude` - 0.5)
AND
l.`Longitude` BETWEEN (d.`Longitude` + 0.5) AND (d.`Longitude` - 0.5);
我试过了:
SELECT d.`City`
,d.`State`
,l.`City`
,l.`StateAbbreviation`
FROM `LocationDirectoryRevised` AS d
LEFT JOIN
`LatLong` AS l
ON l.`Latitude` BETWEEN (d.`Latitude` + 0.5) AND (d.`Latitude` - 0.5) &&
l.`Longitude` BETWEEN (d.`Longitude` + 0.5) AND (d.`Longitude` - 0.5)
我试过了:
SELECT d.`City`
,d.`State`
,IF((l.`Latitude` < (d.`Latitude` + 0.5)) && (l.`Latitude` > (d.`Latitude` - 0.5)) && (l.`Longitude` < (d.`Longitude` + 0.5)) && (l.`Longitude` > (d.`Longitude` - 0.5)), l.`City`,NULL)
,l.`StateAbbreviation`
FROM `LocationDirectoryRevised` AS d
LEFT JOIN
`LatLong` AS l
ON d.`City` = l.`City` AND d.`State` = l.`StateAbbreviation`
但是这些并没有产生我想要的结果。我错过了什么?
谢谢。
【问题讨论】:
-
结果有什么问题?您的查询没有任何经度限制,这可能很重要。
-
糟糕。忘了那个。我添加了与纬度 where 语句相同的行。结果显示我有一个空表。
-
您能否给我们几行数据,以便我们了解存储在您的数据库中的实际信息是什么?
-
我在问题中添加了示例数据。
-
请使用您的架构和此示例数据创建一个sqlfiddle.com。
标签: mysql latitude-longitude coordinate-systems geographic-distance