查找另一个表中的所有多重多边形

时间:2015-12-06 03:12:59

标签: postgresql postgis

所以,我有两张桌子 - PLUTO(土地)和NYZMA(重新划分边界)。他们看起来像:

    pluto                   nyzma
id | geom                name | geom
--------------------     -------------------
 1 | MULTIPOLYGON(x)       A  | MULTIPOLYGON(a)
 2 | MULTIPOLYGON(y)       B  | MULTIPOLYGON(b)

我希望它吐出这样的东西,假设PLUTO记录1在多边形A和B中,而PLUTO记录2在两者中都没有:

pluto_id | nyzma_id
-------------------
    1    | [A, B]
    2    | 

对于每个PLUTO记录的相应几何,我如何循环浏览每个NYZMA记录,并打印任何几何匹配的名称?

1 个答案:

答案 0 :(得分:0)

使用空间函数ST_Contains加入两个表。而不是在主查询中使用GROUP BYARRAY_AGG

WITH subquery AS ( 
    SELECT pluto.id, nyzma.name 
      FROM pluto LEFT OUTER JOIN nyzma 
      ON ST_Contains(nyzma.geom, pluto.geom)
    )
SELECT id, array_agg(name) FROM subquery GROUP BY id;