2014-12-09 2 views
0

SQL에 익숙하지 않고 고유 키를 기반으로 2 개의 테이블 (서로 다른 원본이있는 2 개의 파일에서 가져옴)을 병합하는 간단한 문을 찾으려고합니다. 병합은 행과 속성 모두와 함께해야하며 두 스키마를 효과적으로 병합해야합니다.SQL 행과 속성을 모두 병합

내가 찾고 정확한 동작은 다음과 같습니다 두 테이블에서 같은 키

  1. 라인은
  2. 변경 포함 된 두 테이블에없는 열쇠로
  3. 라인을 병합 두 테이블에 동일한 속성 이름이있는 속성이 병합됩니다.
  4. 두 키 테이블에 동일한 키가 정의되어 있으면 표 2가 테이블 1을 덮어 씁니다.

첫 번째 2는 표준 외부 조인에서 성취 될 수 있지만 두 번째 열로 끝나는 것을 이해합니다.

처음 3 개는 FULL OUTER JOIN과 파이핑/연결을 통해 얻을 수 있지만 하나의 테이블 또는 다른 테이블에 속성이 채워져 있습니다. 두 테이블 모두에 동일한 속성이있는 경우 행을 병합하는 것을 볼 수 있지만 병합 기능은 T-SQL에 있습니다. 그러나, 나는 아직 사용될 SQL의 맛을 선택하지 않았다.

선호도 순서대로 3 가지 솔루션 중 하나를 찾고 있습니다. 1.이 4 가지 동작을 단일 표준 SQL 행 에 결합하는 방법 2.이 4 가지 동작을 몇 가지 표준 SQL 가능한 한 쿼리 3. 모든 SQL 변형에서 사용할 수없는 SQL 변형의 특정 기능에 의존하는 이러한 4 가지 동작을 결합하는 방법

+0

귀하의 질문은 매우 모호 합니다만, 당신이하려는 일을 성취하기 위해 쉽게 집계 또는 사례 표현을 사용할 수있는 것처럼 보입니다. –

답변

0

두 개의 열을 '병합'하려면 COALESCE을 사용할 수 있습니다.

SELECT 
    -- id's are either the same or non existent in either table 
    id = COALESCE(table2.id, table1.id), 
    -- where the join condition is satisfied use table2's values 
    -- where the join condition is not satisfied use either table1's or table2's values 
    colN = COALESCE(table2.colN, table1.colN), 
    -- add columns that aren't in either table 
    colX = table2.colX, 
    colY = table1.colY 
FROM table1 
FULL OUTER JOIN table2 
ON table1.id = table2.id