所以,我有两张桌子 - 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记录,并打印任何几何匹配的名称?
答案 0 :(得分:0)
使用空间函数ST_Contains加入两个表。而不是在主查询中使用GROUP BY和ARRAY_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;