基于hexgrids表几何数据的空间查询:筛选othertable符合条件要素
解决方法
原SQL存在几个问题:
- 第一条查询的别名写法错误,无法将查询结果作为临时集合供第二条查询使用
- 表名
other table包含空格,若实际表名是othertable需去掉空格 - 若需求是相交而非完全包含,
ST_Within并不合适,应该用ST_Intersects
下面提供几种可行的写法:
方法1:EXISTS子查询
通过子查询判断是否存在符合条件的六边形与当前要素相交:
SELECT * FROM othertable ot WHERE EXISTS ( SELECT 1 FROM hexgrids hg WHERE hg.value > 0.5 AND ST_Intersects(ot.geom, hg.geom) )
方法2:CTE(公共表表达式)
先定义符合条件的六边形集合,再通过空间关联筛选目标要素:
WITH hexselection AS ( SELECT geom FROM hexgrids WHERE value > 0.5 ) SELECT ot.* FROM othertable ot JOIN hexselection hs ON ST_Intersects(ot.geom, hs.geom)
方法3:空间JOIN
直接通过空间关系关联两张表,自动筛选出相交的要素,用DISTINCT避免重复输出:
SELECT DISTINCT ot.* FROM othertable ot JOIN hexgrids hg ON ST_Intersects(ot.geom, hg.geom) WHERE hg.value > 0.5
内容的提问来源于stack exchange,提问作者jotamon
相关产品推荐
相关产品推荐

