2014-03-19 107 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

非常感谢... –