虽然有一些类似的问题,但我无法找到解决问题的方法。
我有两个表'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,如上所述。
任何帮助都非常感谢;)
答案 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)