postgresql - 搜索表中任意记录 X 距离内的所有记录
问题描述
我有一张桌子,上面有一堆医院的地理位置(大约 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);
有关的:
推荐阅读
- c# - 如何在 UWP 中更改 AppBarButton 字体大小?
- sql-server - 如何转换具有层次结构的表?
- android - 在 Kotlin 中单击按钮将活动旋转 180 度
- javascript - Windows机器中未更新环境变量
- python - 更改绘图中的颜色范围(imshow)?
- flask - 从谷歌表单优化数据挖掘以用于推荐系统的在线统计(Heroku 上的 Flask 应用程序)
- r - 如何将简单的 Excel LOOKUP 转换为 R 代码?
- python - 如何在熊猫数据框中手动排列行
- python - Pool(num_cores) 因 PermissionError 崩溃:[WinError 5] 访问被拒绝
- angular - 如何在html中制作动态css颜色填充框?