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

标签 postgresql postgis

我有一张表,上面有一堆医院的地理位置(大约 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/

相关文章:

django 2.1.3 'django.db.backends.postgis' 不是可用的数据库后端

python - 数据库查询中的NameError

Python psycopg2 检查行是否存在

Postgresql:日志:启动的 autovacuum 启动器挂起(显然)

linux - postgresql-9.4-postgis-2.1 的包依赖问题

ruby-on-rails - 无法访问postgis的方法

sql - PL/pgSQL 触发器阻止一条河流穿越另一条河流

postgresql - 如何在 Postgres 中用空格分隔的表名进行 sql 查询?

postgresql - 如何在不重启的情况下重新加载pgpool中的pool_hba.conf?

postgresql - 如何使用 pgAdmin 添加几何列