【问题标题】:Updating multiple rows in one table based on multiple rows in a second一秒钟内根据多行更新一个表中的多行
【发布时间】:2011-09-29 23:07:07
【问题描述】:

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

我有以下几点:

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

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

谢谢!

【问题讨论】:

  • 请发布“最终”SQL,您正在发布生成它的代码(危险的是,顺便说一句),这不会添加任何内容,并且更难阅读。

标签: postgresql postgis


【解决方案1】:

类似:

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

?

顺便说一句:您的版本不起作用,因为一行只能在单个更新语句中更新一次。

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多