我有一张表,上面有一堆医院的地理位置(大约 100 行),还有另一张表,上面有一堆其他的地理位置(几万行)。我如何选择任何前一个记录的 X 半径内的所有后一个记录?
最佳答案
使用ST_DWithin()
来自 PostGIS:
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);
相关:
关于postgresql - 搜索表中任何记录的 X 距离内的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56532601/