开发者

Updating multiple rows in one table based on multiple rows in a second

I have two tables, table1 and table2, both of which contain columns that store postgis geometries. What I want to do is see where the geometry stored in any row of table2 geometrically intersects with the geometry stored in any row of table1 and update a count column in table1 with the number of intersections. Therefore, if I have a geometry in row 1 of table1 that intersects with the geometries stored in 5 rows in table2, I want to store a count of 5 in a separate column in table one. The tricky part for me is that I want to do this for every row of column 1 at th开发者_如何学Ce same time.

I have the following:

UPDATE circles SET intersectCount = intersectCount + 1 FROM rectangles 
WHERE ST_INTERSECTS(cirlces.geom, rectangles.geom);

...which doesn't seem to be working. I'm not too familiar with postgres (or sql in general) and I'm wondering if I can do this all in one statement or if I need a few. I have some ideas for how I would do this with multiple statements (or using for loop) but I'm really looking for a concise solution. Any help would be much appreciated.

Thanks!


something like:

update t1 set ctr=helper.ctr
from (
  select t1.id, count(*) as cnt
  from t1, t2
  where st_intersects(t1.col, t2.col)
  group by t1.id
) helper
where helper.id=t1.id

?

btw: Your version does not work, because a row can get updated only once in a single update statement.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜