我在這裏做的唯一更改是將左連接切換到內連接。如果table1中的幾何圖形在table2中不包含幾何圖形,則field3的值將保持爲null,因此您可能需要先執行「更新table1 set field3 = 0」,然後開始
(它可能會變成一點點更快地做到這一點,取決於你有多少功能和每個幾何有多少點)
。
update table1 a
set field3 = b.count1
from
(
SELECT table1.id,
COUNT(table2.id) AS count1
FROM table1
JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id
) b
where a.id = b.id
備選:
update table1 a
set field3 = b.count1
from
(
SELECT table1.id,
COUNT(table2.id) AS count1
FROM table1
left JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id
) b
where a.id = b.id
此外,this site只是在Reddit上今天早上出現了。我沒有花費太多時間來挖掘它,但它看起來很有前途(另一個)學習sql的資源(在特定於Postgres的環境中)。
編輯:我開始懷疑自己關於我第一次發佈的兩步法 - 我認爲這幾乎完全是錯誤的性能,所以我包含了一個替代查詢。
您需要一個'UPDATE'來將數據填充到符合'JOIN'條件的現有行中。你能用一些樣本數據創建一個http://sqlfiddle.com/#!15嗎? – amphibient
我正在努力做到這一點,因爲它使用PostGIS函數,將無法在sqlfiddle工作。或者我錯過了什麼? – DGraham
你不會錯過任何東西 - postgis沒有安裝在sqlfiddle數據庫。 – yieldsfalsehood