我有两个表都有相同的模式,一个将有前一天的记录,另一个将有当前。我希望将两者进行比较,并且只查找更改,或者只查找至少一列中具有不同值的行。
这在pl/sql,oracle中是怎么可能的呢?(我在T-SQL中使用校验和编写了类似的代码,但不确定在pl/sql中该如何做)
发布于 2009-10-19 22:09:53
这个答案提供了一个非常有效的解决方案,使用Oracle比较两个查询的结果:Proving SQL query equivalency
发布于 2009-10-19 21:36:50
您需要一个异或查询,它本质上是一个(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)这个查询还可以很容易地得到改进,还可以使用一个额外的计算列显示哪些记录是插入、删除和更改。
发布于 2009-10-20 08:21:57
作为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);https://stackoverflow.com/questions/1591243
复制相似问题