2016-11-22 2 views
0

두 테이블을 결합하려고합니다. 간단하게하기 위해 테이블에는 공통된 ID와 고유 한 숫자 값이 각각 두 개의 열이 있습니다. 그러나 모든 ID가 두 테이블 모두에있는 것은 아니므로 FULL OUTER JOIN을 사용합니다.전체 외부 조인을 위해 일치하는 열에서 공백 값을 가져 오는 이유는 무엇입니까?

Table1    Table2 
+------+--------+ +------+--------+ 
| ID | Value1 | | ID | Value2 | 
+------+--------+ +------+--------+ 
| ABC | 125 | | ABC | 317 | 
| DEF | 13  | | HIJ | 95  | 
+------+--------+ +------+--------+ 

그래서 나 한테 모든 기록을주는 OUTER을 것 JOIN 기대했다 :

+------+--------+--------+ 
| ID | Value1 | Value2 | 
+------+--------+--------+ 
| ABC | 125 | 317 | 
| DEF | 13  |  | 
| HIJ |  | 95  | 
+------+--------+--------+ 

을하지만 제가 대신보고 있어요 것은 '아무튼 경우 ID가 병합 된 결과에 복사되지이다 표 1에 존재하지 않습니다 :

+------+--------+--------+ 
| ID | Value1 | Value2 | 
+------+--------+--------+ 
| ABC | 125 | 317 | 
| DEF | 13  |  | 
|  |  | 95  | 
+------+--------+--------+ 

왜 내 ID가 비어 있습니까? 내 쿼리는 다음과 같습니다.

SELECT ID, Value1, Value2 
FROM Table1 
FULL OUTER JOIN Table2 ON Table1.ID == Table2.ID; 

SQL Server와 가장 가까운 회사 내부 언어를 사용하고 있습니다. 몇 가지 차이점이 있지만 처음에는 조인 구문에 대한 내 이해를 먼저 확인했습니다.

+0

키와 외부 키 열은 마술처럼 SQL에서 결합되지 않습니다. 명시 적으로 'COALESCE'를 사용하거나 소비 프로그램을 수정하여 두 개의 키 열을 허용해야합니다. – Dai

답변

2

이 시도 :

SELECT 
    COALESCE(Table1.ID, Table2.ID) AS [ID], 
    Table1.Value1, 
    Table2.Value2 
FROM 
    Table1 
    FULL OUTER JOIN Table2 ON Table1.ID = Table2.ID 
2

먼저, 쿼리는 내가 알고있는 모든 데이터베이스의 구문이 올바르지 않습니다. FROM의 각 테이블에는 ID이라는 열이 있습니다. 따라서 SELECT에있는 수식어가없는 ID은 모호합니다. 어떤 테이블인지 알 수 없습니다.

두 번째로, SELECT table1.ID, table2.ID이 있으면 무슨 일이 일어나는지 볼 수 있습니다. ID이 하나의 테이블에는 있지만 다른 테이블에는없는 경우 다른 값은 NULL입니다.

많은 데이터베이스가 ANSI 표준 using 절을 지원합니다. 이를 통해 다음을 할 수 있습니다.

SELECT ID, Value1, Value2 
FROM Table1 FULL OUTER JOIN 
    Table2 
    USING (ID); 

다른 방법으로는 COALESCE() 기능을 사용하는 것입니다.