2010-01-16 4 views
2

나는 결과로 2 개 테이블 2 differen 선택 PostgreSQL에서 두 개의 하위 쿼리 결과를 결합하는 방법은 무엇입니까?

 all calls     our customer contacts 
    number contact_id  and  contact_id name 
    3213  12      12  jonh 
    3213  34      16  michael 
    3213  43      65  hewlet 
    5432  16      32  steward 
    5432  51 
    6543  65 
    2322  54 
    2322  32 

1 수는 다른 접촉에 속할 수


SQL (PostgreSQL의)에서 안돼서 안녕하세요 (연락처 다른 고객에 속하는) 첫 번째 결과 표에서 개의 고유 번호를 선택해야합니다. 그리고 두번째 테이블에서이 연락처의 이름 ..

과 어떻게 결합해야한다 제 2

감사를 선택합니다.

답변

6

당신은 당신이 실제로 all_calls 테이블에서 또한 contact_id 선택하려는 같이 distinct 키워드를 사용할 수 없습니다. 대신 집계 함수 중 하나를 사용하여 각 개별 전화 번호에 대해 contact_id을 하나씩 선택해야합니다.

select tmp.number, contacts.name 
from (
    select number, min(contact_id) as min_id 
    from all_calls 
    group by number 
) as tmp 
join contacts on tmp.min_id = contacts.contact_id 
+0

감사 :이 예에서

나는 나에게 전화 번호 각각에 대해 contact_id 수적으로 가장 낮은과의 접촉을 줄 것이다 min() 기능을 사용합니다. 하지만 왜 min()? 및 "고객 연락처" 의 결과 customer_id = '51' – Falcon

+0

연락처에서 ID를 선택하십시오. 귀하의 질문을 이해하기 때문에, * one * pr을 원할 것입니다. 전화 번호. 동일한 번호에서 두 개의 연락처가 호출 된 경우, 'contact_id'에있는 'min()'또는 'max()'를 사용하여 * one * 값만 선택할 수 있습니다. 'contact_id'가 비즈니스 가치를 가지지 않는다고 가정하면, 두 함수 모두 실제로 "무작위"입니다. –

+0

'where customer_id = 51'을 단순히 쿼리 끝에 추가 할 수 없습니까? 물론 이것은 다른 회사의 두 연락처가 동일한 전화 번호를 공유하지 않는다고 가정합니다. –

관련 문제