搜索表中任何记录的X距离内的所有记录

时间:2019-06-10 19:40:36

标签: postgresql postgis

我有一张桌子,上面有一堆医院地域(大约100行),而另一张桌子上有一堆其他地域的医院(成千上万行)。如何选择所有在前一个记录的X半径内的后一个记录?

1 个答案:

答案 0 :(得分:3)

使用PostGIS中的ST_DWithin()

SELECT *
FROM   whatever w
WHERE  EXISTS (
   SELECT FROM hospital h
   WHERE  ST_DWithin(h.the_geog, w.the_geog, $distance_in_meters)
   );

EXISTS半联接不仅(可能)最快,而且还避免了使用简单(OUTERJOIN的类似查询可能产生的重复项。

您至少应具有此空间GiST索引

CREATE INDEX ON hospital USING gist (the_geog);

相关: