我有两个表都有相同的架构,一个将有前一天的记录,其他将有当前。我想比较两者并仅查找更改或仅在至少一列中具有不同值的行。
如何在pl / sql,oracle中实现这一点? (我在T-SQL中使用校验和编写类似的代码但不确定如何在pl / sql中执行)
答案 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);