具有不同表结构的两个 DB2 表中的数据值之间的差异
Posted
技术标签:
【中文标题】具有不同表结构的两个 DB2 表中的数据值之间的差异【英文标题】:Difference between data values in two DB2 tables with different table structures 【发布时间】:2018-01-02 19:47:26 【问题描述】:我在大型机“旧”和“新”上有两个 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 必须进行差异比较,并且必须将公共列中具有不同值的行写入另一个具有所有公共列的表。
我确实读过关于可以使用的 except& union 函数,但是这些额外的约束(表结构的差异和并非所有 Id 都按顺序出现)使查询过于复杂。
有没有更简单的方法来做到这一点?我无法在大型机上安装任何软件/第三方工具。请帮忙。
谢谢。
【问题讨论】:
【参考方案1】:这是我比较表格的通用方法。
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 语句中。
【讨论】:
以上是关于具有不同表结构的两个 DB2 表中的数据值之间的差异的主要内容,如果未能解决你的问题,请参考以下文章
将 mySql 数据库表复制到另一个具有不同表结构的数据库表