我有两个表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循环)执行此操作有一些想法,但我真的在寻找一个简洁的解决方案。任何帮助将不胜感激。
谢谢!
答案 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:您的版本不起作用,因为一行只能在一个更新语句中更新一次。