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

Postgresql '';用作表达式的子查询返回多行'';postgres错误,postgresql,request,geometry,postgis,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; 但我得到了以下错误

我正在尝试实现一个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'
论GIS的堆栈交换

您可以将条件移动到子查询之外。ST_Intersects一次处理一行(对于每个几何体),因此如果使用子查询,它也必须只返回一行,并且可能有多个“Tetrarti”行

select distinct nom_reg_12 
from region_15,repartition 
where id_espece='Tetrarti'
and st_intersects(region_15.geom,
                   repartition.geom)=true; 

首先,您不具备在SQL中加入region15和重新分区的条件。您只需使用子查询添加逻辑条件。它几乎是纯笛卡尔的。您的条件类似于将与任何重新分区相交的所有区域_15与所有重新分区;)

记住为这两列创建空间索引

create index on region_15 using gist(geom);
create index on repartition using gist(geom);

根据消息,指定条件下有多行。试着去完善它。。。
create index on region_15 using gist(geom);
create index on repartition using gist(geom);