2013-12-11 59 views
0

我想要計算在表1的每個多邊形中找到的點數(存儲在表2中)。查詢可以工作,但我試圖修改它以添加值生成到表1中的空白列。將查詢生​​成的值插入空白列

到目前爲止它只能將結果附加到表格的底部。任何幫助?總結一下,我試圖將這個查詢生成的值添加到table1中並將它們添加到table1中。此時查詢將它們插入表1中的空白列,但沒有與ID匹配,但附加在底部。

INSERT INTO table1(field3) 
SELECT COUNT(table2.id) AS count1 
FROM table1 LEFT JOIN table2 
ON ST_Contains(table1.geom,table2.geom) 
GROUP BY table1.id; 
+1

您需要一個'UPDATE'來將數據填充到符合'JOIN'條件的現有行中。你能用一些樣本數據創建一個http://sqlfiddle.com/#!15嗎? – amphibient

+0

我正在努力做到這一點,因爲它使用PostGIS函數,將無法在sqlfiddle工作。或者我錯過了什麼? – DGraham

+0

你不會錯過任何東西 - postgis沒有安裝在sqlfiddle數據庫。 – yieldsfalsehood

回答

0

我在這裏做的唯一更改是將左連接切換到內連接。如果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的環境中)。

編輯:我開始懷疑自己關於我第一次發佈的兩步法 - 我認爲這幾乎完全是錯誤的性能,所以我包含了一個替代查詢。

+0

完美,非常感謝! @yieldsfalsehood – DGraham