【发布时间】:2023-03-06 11:41:01
【问题描述】:
我有两个表,其中一个具有所有字段 VARCHAR2,但另一个具有不同数据的不同类型。
例如:
Table One
==========================
Col 1 VARCHAR2 UNIQUE KEY
Col 2 VARCHAR2
Col 3 VARCHAR2
===========================
Table Two
==========================
Col One VARCHAR2 UNIQUE KEY
Col Two TIMESTAMP
Col Three NUMBER
==========================
我们有一个映射表。它表示表一的哪一列必须与表二的哪一列进行比较。 例如
Mapping Table
==============================
Table One Table Two
==============================
Col 1 Col One
Col 2 Col Three
Col 3 Col Two
==============================
现在在表一的唯一键的帮助下,我们必须在表二中找到相同的行并逐列比较行并获取数据的变化。 目前我们正在使用java程序逐行逐列比较数据,并获取具有相同UNIQUE KEY的行中数据之间的变化。它工作正常,但由于我们在 DB 中有 100000 条记录而花费了太多时间。
现在我的问题是:有什么方法可以在 SQL 级别比较数据并获取数据变化?
【问题讨论】:
-
请提供样本数据和预期结果。考虑构建一个SQLfiddle.com 模型
-
什么是“长路漫漫”?如果您在 Java 中正确实现了这一点,您应该能够立即比较两个包含 100.000 个项目的列表,因此大部分时间都在加载数据本身。
-
使用包含列名的映射表,您必须构建一个 PL/SQL 函数,该函数在系统表 all_tab_cols 的帮助下基于该表构建动态查询。但是,如果您准备好忽略映射表并简单地对列名进行硬编码(为什么不呢?无论如何列名应该是静态的!),您可以编写一个直接的 SQL 查询。