首页 > 解决方案 > 为表格中的每一行选择最近的点

问题描述

我用它来找到最近的点

SELECT 
  id, 
  ST_Distance(
   POINT(52.760667210533,-7.22646337599035),
   geo_point
  ) as distance 
from Points 
order by distance limit 1

我有一个包含所有候选点的临时表 TempPoints,我想将它们规范化到 OSM 节点上,但是有很多,所以我需要一个查询来一次性解决它们。UNION 不会让我使用 order by,我的 DB 原始查询界面不会让我只触发一系列由“;”分隔的查询。临时表有 lat 和 lon,但也可以很容易地有一个 POINT。我怎么去

select id,NearestTo(TempPoint.geo_point,Points) from TempPoints;

编辑:我可以在我的大型联合查询中为每个选择加上括号,这解决了我的问题。

我仍然希望能够加入最近的行。

标签: mysqlgeospatialopenstreetmap

解决方案


这可能对您有用:

SELECT t.id as tid, p.id as pid, p.geo_point
FROM TempPoint t
JOIN Points p ON p.id = (
    SELECT p1.id
    FROM Points p1
    ORDER BY ST_Distance(p1.geo_point, t.geo_point)
    LIMIT 1
)

推荐阅读