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

时间:2010-12-05 15:37:17

标签: sql oracle comparison

虽然有一些类似的问题,但我无法找到解决问题的方法。

我有两个表'new','old',两者都有相同的架构col1,col2,col3。

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

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

我在不同组合中使用minus的所有尝试都没有导致所有更改或包含旧col3值和新col3值的行。我只需要/希望结果包含所有更改的col3值的new.col1,new.col3,如上所述。

任何帮助都非常感谢;)

2 个答案:

答案 0 :(得分:2)

以下内容将查找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'
              );

答案 1 :(得分:0)

如果无论列col2中的内容是什么,并且您不希望删除的项目(旧的但不是新的项目)都在结果中,那么这可能会有所帮助:

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