基于一秒内的多行更新一个表中的多个行

时间:2011-07-06 20:34:00

标签: postgresql postgis

我有两个表table1和table2,两个表都包含存储postgis几何的列。我想要做的是查看table2的任何行中存储的几何与几何上与存储在table1的任何行中的几何相交的位置,并使用交叉点的数量更新table1中的count列。因此,如果我在table1的第1行中的几何与table2中的5行中存储的几何相交,我想在表1的单独列中存储5的计数。对我来说棘手的部分是我想同时为第1列的每一行执行此操作。

我有以下内容:

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

......似乎没有用。我对postgres(或者一般的sql)并不太熟悉,我想知道我是否可以在一个语句中完成所有操作,或者我是否需要一些语句。我对如何使用多个语句(或使用for循环)执行此操作有一些想法,但我真的在寻找一个简洁的解决方案。任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:5)

类似的东西:

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:您的版本不起作用,因为一行只能在一个更新语句中更新一次。