我在主机'old'和'new'上有两个db2表。这些表目前有10亿条记录,目前有70-80列。这些表从两个不同的系统中填充,因此表结构不相同,即列中存在一些差异,两个表共享一些必须针对不同数据值进行比较的公共列。例如:
OLD
id A B C
1 x y z
1 x y z
3 m n o
4 e f g
NEW
id B C D E
1 y a a b
1 y a a b
2 n o c d
4 g g l m
因此,在上面的示例中,'old'和'new'具有必须比较差异的列B和C,并且在公共列中具有不同值的行必须写入具有所有公共列的另一个表。
我读过关于& amp;&可以使用的union函数,但是这些附加约束(表结构的差异而不是所有ID都按顺序存在)使查询过于复杂。
有没有更简单的方法呢?我无法在大型机上安装任何软件/第三方工具。请帮忙。
谢谢。
答案 0 :(得分:0)
这是我如何比较表的通用。
How to retrieve only those rows of a table (db1) which are not in another table (db2)
修改为仅使用两列。
SELECT 'AFTER', A.* FROM
(SELECT b,c FROM &AFTER
EXCEPT
SELECT b,c FROM &BEFORE) AS A
UNION
SELECT 'BEFORE', B.* FROM
(SELECT b,c FROM &BEFORE
EXCEPT
SELECT b,c FROM &AFTER) AS B
如果需要保存结果,请在create table语句中包含上述内容。