我正在使用MySQL 5.5.52。缩写:Lat =纬度,长=经度,NE =东北,SW =西南。
我有两个SQL表:
第一个表包含"区域"。每个区域由ID,NE Lat,NE Long,SW Lat,SW Long组成。
第二个表包含" Points"。每个Point由ID,Lat,Long组成。
我需要一个SQL语句,给定一个区域ID列表将返回这些区域中的点。如果Point的Lat-Long位于由Area&的NE Lat-Long和SW Lat-Long定义的右上角和左下角的正方形内,则Point被定义在Area中。
注意:我可以将要定义的区域更改为具有半径的单个Lat-Long,其中Points位于'圈内。但理想情况下,我不想这样做,除非有更高效的SQL语句来解决这个问题。
答案 0 :(得分:1)
根据点位置在区域范围内的条件加入两个表。
Select areaTable.*, pointsTable.*
From pointsTable
Join areaTable
On pointTable.lat between areaTable.SWLat and areaTable.NELat
and
pointTable.long between areaTable.SWLong and areaTable.NELong
给出每个区域和相应的点。
如果需要,使用特定区域的where子句进一步参数化。
Where areaTable.NELat=@areaNELat
and areaTable.NELong=@areaNELong
and areaTable.SWLat=@areaSWLat
and areaTable.SWLong=@areaSWLong
只需用你喜欢的区域纬度和长值代替@s。