Sql比较不匹配值

时间:2014-11-04 16:08:54

标签: sql oracle

我想比较两个不同的表之间的值,只返回差异,但我很难提出一个查询。

我有一个员工标签1和员工标签2.我正在比较开发和测试之间的数据。

employee1

id1 cd1   desc1 
1  reg  regular
2  temp temporary
3  reg  regular
4  new  new hire
5  del  terminated 

和Employee2

id2 cd2   desc2
1  reg  regular
2  temp temporary-456
3  reg  regular-123
4  new  new hire
5  del  terminated

我的结果集应该是(我将在emplid,cd上加入)

id cd1  desc1     cd2  desc2            
1  reg regular    reg  regular-123
2  temp temporary temp temporary-456

我试过这种方法

SELECT Distinct EMPL_ID, cd1, desc1, CD2, desc2
FROM   empl 1,  empl2
WHERE EMPL_ID1= EMPL_ID2
and CD1=cd2
AND desc1<>desc2    

但这会产生重复的结果。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

根据您的数据,您需要加入id,而不是cd1

SELECT empl1.EMPL_ID, cd1, desc1, CD2, desc2
FROM  empl1 JOIN
      empl2
      ON  empl1.EMPL_ID = empl2.EMPL_ID and empl1.CD1 = empl2.cd2 and
          empl1.desc1 <> empl2.desc2  ;

答案 1 :(得分:0)

加入表但使用id列而不是cd1列。无需在查询中使用

答案 2 :(得分:0)

尝试这种方式来比较Dev&amp;测试数据

SELECT Distinct emp_dev.EMPL_ID, emp_dev.cd, emp_dev.desc, emp_tst.CD, emp_test.desc
FROM   empl1 emp_dev,  empl2 emp_tst
WHERE emp_dev.EMPL_ID= emp_tst.EMPL_ID
and ( emp_dev.CD=emp_tst.cd OR emp_dev.desc<>emp_tst.desc ) 

或者,如果你只是想要开发与开发之间的区别测试:

(SELECT "Record Missing in Test" Note, EMPL_ID, cd, desc 
FROM   empl1 emp_dev 
 MINUS 
 SELECT "Record Missing in Test" Note, EMPL_ID, cd, desc 
 FROM   empl1 emp_tst) 
union 
(SELECT "Record Missing in Dev" Note, EMPL_ID, cd, desc 
FROM   empl1 emp_tst 
 MINUS 
 SELECT "Record Missing in Dev" Note, EMPL_ID, cd, desc 
 FROM   empl1 emp_dev) 

希望这有帮助