2013-03-19 74 views
1

表1:加入两个表时,在两列中的值不匹配

onode_c, dnode_c, dist1 

表2:

onode_c, dnode_c, dist2 

我需要一个查询这对于返回

onode_c, dnode_c, dist1, dist2 

dist1dist2在表1和表2中不匹配的记录

select a.onode_c, a.dnode_c, trunc(a.dist1), trunc(b.dist2) 
from table1 a, table2 b 
where a.onode_c = b.onode_c and a.dnode_c = b.dnode_c and trunc(a.dist1) != trunc(b.dist2); 

上述查询多次返回相同的记录。

+1

'TRUNC(b.f1)'?我在table2中看不到列“f1”。同时'dist'列... – 2013-03-19 00:19:43

+0

对不起,'trunc(a.dist),trunc(b.f1)'应该是trunc(a.dist1),trunc(b.dist2) - 在修改原始查询使其简单。 – Jeba 2013-03-19 00:23:10

+0

'(onode_c,dnode_c)是一个表还是两个表上的唯一键或主键?如果只有一个,哪一个?由于您报告了多行,因此我会假定至少有一个表对('onode_c,dnode_c)'至少在一个表上不唯一。如果对于表中的给定值(onode_c,dnode_c)',在另一个表中有多个值,其中'trunc(a.dist)!= trunc(b.dist2)'是对某些行为true,对其他行则为false。该节点对的值应该包含在内吗? – 2013-03-19 00:50:25

回答

0

试试下面的语句:

select a.onode_c, a.dnode_c, trunc(a.dist), trunc(b.dist2) from table1 a 
left join table2 b on a.onode_c = b.onode_c and a.dnode_c = b.dnode_c 
where trunc(a.dist1) != trunc(b.dist2); 
+0

发表的问题表中没有'f1'和'dist'列 – 2013-03-19 00:21:53

+0

@IswantoSan那么OP如何说上述查询多次返回相同的记录? – 2013-03-19 00:22:55

+0

它的魔力.... ???? – 2013-03-19 00:23:24

0

尝试使用SELECT DISTINCT也许

0

试试这个:

select DISTINCT a.onode_c, a.dnode_c, trunc(a.dist1), trunc(b.dist2) 
from table1 a, table2 b 
where a.onode_c = b.onode_c and a.dnode_c = b.dnode_c and trunc(a.dist1) != trunc(b.dist2); 
+0

这一个作品。谢谢! – Jeba 2013-03-19 00:26:43

+0

@Jeba:也许你可以[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235):) – 2013-03-20 02:08:34