2014-03-19 160 views
0

我需要比較兩個表(表A作爲生產數據和B作爲舊數據)之間的電子郵件記錄(通過電子郵件地址)以找到差異並在列中顯示結果,例如「新建」 ,「刪除」等SQL查找兩個表之間的差異

如果在表A中存在,而不是在表B,它應該存在,如果表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 
) 

,但數據不正確的代碼不會返回記錄應「刪除」 (表B中發現的,而不是在表)

請注意。謝謝。

+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

非常感謝... –