2017-12-23 13 views
0

여러 속성을 하나의 테이블에 표시 할 수 있도록 여러 공통 속성에서 조인해야하는 배수 테이블이 있습니다.분리형 행이있는 공통 속성에 대해 여러 테이블을 결합하는 경우

내가 뭘

+--------+---------+-------+--------+ 
| make | model | year | kms | 
+--------+---------+-------+--------+ 
| toyota | corolla | 1999 | 25000 | 
| toyota | camry | 2002 | 50000 | 
+--------+---------+-------+--------+ 

표 2

+--------+---------+-------+---------+ 
| make | model | year | mileage | 
+--------+---------+-------+---------+ 
| toyota | corolla | 1999 |  20 | 
| toyota | qualis | 2004 |  25 | 
+--------+---------+-------+---------+ 

표 3

+--------+----------+-------+-------+ 
| make | model | year | color | 
+--------+----------+-------+-------+ 
| toyota | camry | 2002 | blue | 
| toyota | rav4 | 2006 | green | 
+--------+----------+-------+-------+ 

표하여 결과에 가입하려면 다음

select 
    * from table1 as a 
    full join table2 as b 
    using (make, model, year) 
    full join table3 as c 
    using (make, model, year) 

필요한 것은 아래 표와 같습니다.

+--------+---------+-------+-------+----------+--------+ 
| make | model | year | kms | mileage | color | 
+--------+---------+-------+-------+----------+--------+ 
| toyota | corolla | 1999 | 25000 |  20 |  | 
| toyota | camry | 2002 | 50000 |   | blue | 
| toyota | qualis | 2004 |  |  25 |  | 
| toyota | rav4 | 2006 |  |   | green | 
+--------+---------+-------+-------+----------+--------+ 

그러나 일부 결과는 make,model,year과 중복되어 일부 행에 중복됩니다.

필요한 것을 얻으려면 어떻게해야합니까? 실제 데이터 세트의 경우, 테이블 당 5 common attributes, 테이블 당 약 20-40 different attributes이 있습니다.

+0

본능은 'USING'에 의존하지 않고 전체 조인 구문을 사용하여 테스트하는 것입니다. –

답변

2

사용중인 전체 결합으로 인해 중복이 발생할 수 있습니다. 아래의 왼쪽 조인으로 바꾸십시오 :

SELECT 
A.MAKE, A.MODEL, A.YEAR, T1.KMS, T2.MILEAGE, T3.COLOR 
FROM 
(SELECT MAKE, MODEL, YEAR FROM TABLE1 UNION 
SELECT MAKE, MODEL, YEAR FROM TABLE2 UNION 
SELECT MAKE, MODEL, YEAR FROM TABLE3) A 
LEFT JOIN TABLE1 T1 
ON T1.MAKE = A.MAKE AND T1.MODEL = A.MODEL AND T1.YEAR = A.YEAR 
LEFT JOIN TABLE2 T2 
ON T2.MAKE = A.MAKE AND T2.MODEL = A.MODEL AND T2.YEAR = A.YEAR 
LEFT JOIN TABLE3 T3 
ON T3.MAKE = A.MAKE AND T3.MODEL = A.MODEL AND T3.YEAR = A.YEAR;; 
+0

table2는 새로운'make, model, year' 조합을 갖기 때문에 이것이 작동하지 않을 수도 있습니다. – user3206440

+0

방금 ​​편집했습니다. – Vashi

+0

이것은 OP의 예제에서 작동합니다. 또한 추가 한 메모를 참조하십시오. 실제 데이터에는 약 5 개의 공통 열이 있고 추가적으로 10 개의 각 테이블에 고유 한 20-40 개의 열이 있습니다.이 시나리오에는 공통 열만을 지정하는 방법이 있습니다. T1.KMS, T2.MILEAGE, T3.COLOR'와 같은 각 열 이름을 지정하려면 - 내 실제 데이터에서이 속성은 200에서 400 사이의 쿼리가 될 것입니다 - 기본적으로이 옵션을 사용하여 조인을 지정하는 방법을 간단히 묻습니다 'UNION'을 통해 만든 테이블에서 나온 공통 콜을 제외한 모든 콜 – user3206440