Oracle SQL在两个表中找到具有相同模式的不同值

问题描述:

尽管出现了一些类似的问题,但我无法找到解决我的问题的解决方案。Oracle SQL在两个表中找到具有相同模式的不同值

我有两个表'新','旧',都有相同的架构col1,col2,col3。

两者不一定具有相同的记录,特别是新的记录可能比旧的记录更多。

现在我在找的是一个查询返回所有记录new.col3不同于old.col3(和new.col1等于old.col1)。 col3可以有不同的值或null。 col1不是PK,所以可能有多个具有相同col1值的记录。

我所有在不同组合中使用minuses的尝试都没有导致所有更改,也没有包含旧的以及新的col3值。我只需要/想要结果包含new.col1,new.col3所有更改的col3值,如上所述。

任何帮助,不胜感激;)

+0

如果有`col1`的重复值,你怎么知道`col3`被改变了,或者它只是一个不同的记录? – Gabe 2010-12-05 15:48:53

+0

应该只有一个记录与col3集合中的每个col1相同,但是如果有更多,它们是否都返回结果集并不重要。 – Tom 2010-12-05 15:53:51

+0

更多信息:所有相同的col1指的是同一个人,并且具有不同的col2值(旧表和新表中都相同)。关于这个查询虽然我只对col1和col3感兴趣。 – Tom 2010-12-05 16:02:14

下会发现在NEW_TABLE这样所有的行,存在着在OLD_TABLE至少一行与COL3不同的值。

select a.col1 
     ,a.col3 
    from new_table a 
where exists(select 'x' 
       from old_table b 
       where a.col1 = b.col1 
       and decode(a.col3, b.col3, 'same', 'diff') = 'diff' 
      ); 

如果不管它是什么在col2列,你不想删除的项目(项目是在老,但不是在新的)要在结果则可能求助:

select new.col1, new.col3 from new 
where new.col3 not in (select old.col3 from old where old.col1 = new.col1)