2011-07-06 34 views
1

我有兩個表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

請發佈「最終」的SQL,您發佈了您生成它的代碼(危險地,順便說一句),並且這不會添加任何內容並使其更難閱讀。 – leonbloy

回答

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

相關問題