我正在尝试实现postgres请求:
select distinct nom_reg_12
from region_15,repartition
where st_intersects(region_15.geom,
(select geom
from repartition
where id_espece='Tetrarti'))=true;
但是我收到以下错误:
用作表达式
的子查询返回的多行
我第一次尝试这个并且工作正常:
select distinct nom_reg_12
from region_15,repartition
where st_intersects(region_15.geom,repartition.geom)=true;
然后我尝试了这个部件来获得我想要的几何体:
select geom from repartition where id_espece='Tetrarti'
答案 0 :(得分:0)
您可以将条件移到子查询之外。 ST_Intersects一次处理1行(对于每个几何),所以如果使用子查询,它也必须只返回一行,并且你可能有超过1'Tetrarti'行
select distinct nom_reg_12
from region_15,repartition
where id_espece='Tetrarti'
and st_intersects(region_15.geom,
repartition.geom)=true;
答案 1 :(得分:0)
首先 - 你没有条件加入region15并在你的SQL中重新分区。您只需使用子查询添加逻辑条件。它几乎是纯粹的笛卡儿。您的条件就像加入所有与所有重新分区的重新分区相交的region_15;)
select nom_reg_12
from region_15 r15,repartition r
where exists (select from repartition where id_espece='Tetrarti' and
st_intersects(r15.geom,r.geom)=true); |
请记住为两列创建空间索引
create index on region_15 using gist(geom);
create index on repartition using gist(geom);