2013-12-11 2 views
0

테이블 1의 각 다각형에있는 점의 수 (테이블 2에 저장되어 있음)를 계산하려고합니다. 쿼리는 작동하지만 값을 추가하려고 변경했습니다. 테이블 1의 빈 열로 생성됩니다.쿼리에서 생성 된 값을 빈 열에 삽입

지금까지는 결과를 테이블의 맨 아래에 추가하여 작동합니다. 어떤 도움이 필요합니까? 요약하려면이 쿼리에서 생성 된 값을 추가하여 table1에 추가하려고합니다. 현재 쿼리는 테이블 1의 빈 열에 ID를 삽입하지만 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

'JOIN' 기준과 일치하는 기존 행에 데이터를 채우기 위해서는'UPDATE '가 필요합니다. 몇 가지 샘플 데이터로 http://sqlfiddle.com/#!15를 만들 수 있습니까? – amphibient

+0

sqlfiddle에서 작동하지 않는 PostGIS 함수를 사용하므로이 작업을 수행하는 데 어려움을 겪고 있습니다. 또는 나는 무엇인가 놓치고 있냐? – DGraham

+0

당신은 아무것도 놓치지 않았습니다 - postgis는 sqlfiddle 데이터베이스에 설치되어 있지 않습니다. – yieldsfalsehood

답변

0

여기서 변경 한 사항은 왼쪽 조인을 내부 조인으로 전환하는 것입니다. table1의 기하학에 table2에 기하학이 들어 있지 않은 경우 field3의 값이 null로 유지되므로 "update 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는 오늘 아침 레딧에 나타났다. 나는 그것을 통해 많은 시간을 보냈지는 못했지만 postgres 특정 환경에서 SQL을 배우기위한 (또 다른) 자원으로 유망 해 보인다.

편집 : 내가 처음 게시 한 두 단계 접근법에 관해서는 자신을 의심합니다. 성능에 대해서는 거의 완전히 잘못된 것 같아서 대체 쿼리를 포함 시켰습니다.

+0

완벽한, 정말 고마워요! @yieldsfalsehood – DGraham

관련 문제