2016-07-09 2 views
0

나는 몇 가지 큰 (121,000,000 행) 테이블 (BIGINT LINK_TO 아이디 BIGINT)이 있습니다큰 테이블의 postgresql에서 행별로 출력 조합 값을 계산하는 방법은 무엇입니까?

id | link_to 
---|-------- 
1 | 4 
2 | 4 
3 | 4 
5 | 7 
6 | 7 

을 그리고 LINK_TO 값으로 교차 자체 ID 값을 연결해야합니다. 따라서 동일한 link_to 값 (4)을 가진 ID 값 (1,2,3) 사이의 모든 조합이어야하며 모든 link_to 값에 대해 반복되어야합니다. 결과에서

은 다음과 같아야합니다

id | link_to 
---|-------- 
1 | 2 
1 | 3 
2 | 1 
2 | 3 
3 | 1 
3 | 2 
5 | 6 
6 | 5 

내가 삽입합니다이 선택 (ON 충돌로 피하기 dublicate 고유 인덱스 (ID, LINK_TO)에 대한 아무것도하지 않는다) 같은 테이블에 있습니다. GROUP BY link_to -> array_agg (id) -> unnest -> ORDINALITY와 함께 플레이를 시도했지만 성공하지 못했습니다 ...

다른 솔루션 (CTE, 윈도우 기능, 사용자 정의 함수)이 있습니까?

답변

1

당신이 찾고있을 것 자체 조인 :

select b1.id, b2.id 
from bigtable b1 join 
    bigtable b2 
    on b1.link_to = b2.link_to and b1.id <> b2.id; 
+0

빙고! 큰 감사를 드린다! http://www.azquotes.com/quote/503289 –

관련 문제