2013-10-19 1 views
-1

조인해야하는 두 개의 테이블 (Table1 및 Table2)이 있습니다.SQL : 두 번째 테이블에서 중복을 제외하고 테이블 조인

id은 표 1과 표 2를 연결합니다.

  • 출력 테이블은 Table1의 모든 행을 포함해야합니다.

  • 표 2에는 출력 테이블에 나타나서는 안되는 중복이 있습니다.

  • 표 2 중복 된 행은 id 부여하는 열에 NULL 있고, 표 2의 다른 행은 동일한 id이 열에있는 값을 갖는 경우, 출력 테이블 대신 NULL 값을 포함해야하는 경우. (예 : 아래 예에서 id 002, 003 및 005와 같이)

  • 중복 된 행에 주어진 id에 대해 동일한 열에 대해 서로 다른 값이 포함 된 경우. 모든 값을 출력 테이블로 가져올 수 있습니다. (즉, 아래의 예 등에 id 001)

예 :

표 1

ID  Value1 
---- ------ 
001 Mary 
002 Jane 
003 Peter 
004 Smith 
005 Katy 

표 2

ID  Value2 Value3 
---- ------ ------ 
001 25  33 
001 25  38 
001 NULL 33 
002 NULL NULL 
002 18  56 
003 22  NULL 
005 NULL 34 

I 가입해야 테이블과 다음 결과를 얻을 :

ID  Value1 Value2 Value3 
---- ------ ------ ------ 
001 Mary 25  33 
002 Jane 47  88 
003 Peter 22  NULL 
004 Smith NULL NULL 
005 Katy NULL 34 

감사합니다.

답변

3

SQL Fiddle를 참조하십시오 답에 대한

SELECT DISTINCT T1.ID, T1.Value1, 
    (
    SELECT ST2.Value2 
    FROM Table2 ST2 
    WHERE T1.ID = ST2.ID 
    ORDER BY ST2.Value2 
    LIMIT 1 
) AS Value2, 
    (
    SELECT ST3.Value3 
    FROM Table2 ST3 
    WHERE T1.ID = ST3.ID 
    ORDER BY ST3.Value3 
    LIMIT 1 
) AS Value3 
FROM Table1 AS T1 
+0

@Linger 덕분에. 제가 놓친 뭔가가있었습니다. 출력에서 피할 필요가있는 NULL 값이 있습니다. 이것을 제거하기 위해 무엇을해야합니까? (문제의 업데이트 된 테이블) – slayernoah

+0

** @ slayernoah **, 내가 너를 따라 가는지 모르겠다. NULLS가있는 레코드를 전혀 표시하지 않겠습니까? 아니면 대신에 '0'으로 표시하겠습니까? – Linger

+0

나는 질문에 놓친 몇 가지 시나리오를 추가했습니다. 이 바이올린을 참고하십시오 : [link] (http://sqlfiddle.com/#!2/e89ea/1). 출력 테이블에 중복 행이 있습니다. – slayernoah