2014-03-19 7 views
0

차이점을 찾고 "새로 만들기"와 같은 열에 결과를 표시하려면 두 테이블 (생산 데이터로 표 A, 이전 데이터로 B) 사이의 전자 메일 레코드 (전자 메일 주소로) 표 B에있는 경우 표 A에있는 경우,SQL에서 두 테이블 사이의 차이 찾기

을 "삭제"등이 아닌 표 B에, 그것은 "새로운"다른

를 표시해야합니다, 표 A, 그것은 "삭제"를 표시해야하지

두 테이블 모두에 표시되면 "유지 관리"로 표시되어야합니다.

DisplayName  LastName Diremail Result 
============================================== 
XXX    XXX   [email protected]  New 
ABC    ABC   [email protected]  Delete 
DDD    DDD   [email protected]  Maintain 

내 코드와 같은 결과는 다음과 같이

SELECT b.DisplayName, 
     b.LastName, 
     b.diremail,   
     Result = CASE WHEN a.DirEmail IS NULL THEN 'New' 
     when b.DirEmail IS null then 'delete'  
        else 'Maintain' 
       END 
FROM vHRIS_StaffDB b  
     LEFT JOIN HRIS_DL_Lists a 
      ON a.DirEmail = b.DirEmail 
WHERE (
a.DirEmail IS NULL 
OR  a.DisplayName != b.DisplayName 
) 

하지만 코드가 을 "삭제"한다 기록을 반환하지로 데이터 정확하지 (하지 표 A에, 표 B에서 발견)

pls. 감사.

+0

두 데이터베이스 (또는 두 데이터베이스에서 두 개 이상의 테이블)를 동기화하려고하는 것 같습니다. – jpmc26

답변

0

왼쪽 결합 대신 전체 결합이 필요한 것 같습니다. 시도해보십시오.

SELECT coalesce(b.DisplayName, a.DisplayName) DisplayName, 
     coalesce(b.LastName, a.LastName) LastName, 
     coalesce(b.diremail, a.diremail) diremail, 
     Result = CASE WHEN a.DirEmail IS NULL THEN 'New' 
     when b.DirEmail IS null then 'delete'  
        else 'Maintain' 
       END 
FROM vHRIS_StaffDB b  
     FULL JOIN HRIS_DL_Lists a 
      ON a.DirEmail = b.DirEmail 
WHERE (
a.DirEmail IS NULL 
OR  a.DisplayName != b.DisplayName 
) 
+0

감사합니다 ... –