具有不同表结构的两个 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 数据库表复制到另一个具有不同表结构的数据库表

如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?

iOS中的哈希表

比较 2 个表中的值并生成具有差异的新表

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]