''用作表达式''postgres错误的子查询返回多行

时间:2017-07-12 13:53:30

标签: postgresql request geometry postgis

我正在尝试实现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'

2 个答案:

答案 0 :(得分:0)

GIS StackExchange上的

Cross-posted

您可以将条件移到子查询之外。 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);