Oracle - 两个表中两行之间的差异或变化

时间:2009-10-19 21:23:30

标签: sql oracle plsql oracle10g

我有两个表都有相同的架构,一个将有前一天的记录,其他将有当前。我想比较两者并仅查找更改或仅在至少一列中具有不同值的行。

如何在pl / sql,oracle中实现这一点? (我在T-SQL中使用校验和编写类似的代码但不确定如何在pl / sql中执行)

3 个答案:

答案 0 :(得分:3)

您想要一个独占差异查询,它本质上是一个(A-B)U(B-A)查询:

(SELECT * FROM TODAY_TABLE
MINUS
SELECT * FROM YESTERDAY_TABLE)
UNION ALL
(SELECT * FROM YESTERDAY_TABLE
MINUS
SELECT * FROM TODAY_TABLE)

此查询也可以轻松改进,以便使用其他计算列显示哪些记录是插入,删除和更改。

答案 1 :(得分:3)

这个SO答案提供了一个非常有效的解决方案,使用Oracle来比较2个查询的结果:Proving SQL query equivalency

答案 2 :(得分:3)

作为Dougman posted比较两个数据集的最有效方法之一是对它们进行分组。我通常使用这样的查询来比较两个表:

SELECT MIN(which), COUNT(*), pk, col1, col2, col3, col4
  FROM (SELECT 'old data' which, pk, col1, col2, col3, col4
           FROM t
         UNION ALL
         SELECT 'new data' which, pk, col1, col2, col3, col4 FROM t_new)
 GROUP BY pk, col1, col2, col3, col4
HAVING COUNT(*) != 2
 ORDER BY pk, MIN(which);