我有两张桌子。表A结构是
City | State | Country | Latitude | Longitude | LocPoint(Longitude,Latitude)(spatial index)
我在数据类型为Point 的 LocPoint 列上创建了空间索引。
表B
Latitude | Longitude
我想将最近城市的城市州和国家信息与表B中的点的位置连接起来两个表A和B.我知道得到最近点的公式,我只是卡在加入部分的地方我将只加入最近点。
运行查询后的预期OutPut
Latitude(TableB) | longitude(TableB)| City(Nearest from lat/Lon from Table A) | State | Country
有什么想法吗?
答案 0 :(得分:0)
让我们调用function dst
来计算两点之间的距离以简化。
现在,您需要计算TableB中您的城市与城市之间的距离。
SELECT TA.*, TB.*, dst(TA,TB) as distance
FROM TableA TA
CROSS JOIN TableB TB
现在您需要使用变量为每个TableB条目选择最小距离。如果您有TableB的PK,会有所帮助。如果您没有PK,可以使用CONCAT (tableB.Latitud,tableB.Longitud)
。
SELECT *
FROM (
SELECT *,
@rn := IF(@pk = tb_pk,
@rn + 1,
IF(@pk := tb_pk, 1, 1)
) as rn
FROM (
SELECT TA.*, TB.*, dst(TA,TB) as distance
FROM TableA TA
CROSS JOIN TableB TB
) T
CROSS JOIN ( SELECT @rn := 0, @pk := 0 ) as var
ORDER BY distance DESC -- Find the near city
) Y
WHERE Y.rn = 1 -- Only select the first city for group.