我有一张桌子,上面有一堆医院地域(大约100行),而另一张桌子上有一堆其他地域的医院(成千上万行)。如何选择所有在前一个记录的X半径内的后一个记录?
答案 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
半联接不仅(可能)最快,而且还避免了使用简单(OUTER
)JOIN
的类似查询可能产生的重复项。
您至少应具有此空间GiST索引:
CREATE INDEX ON hospital USING gist (the_geog);
相关: