Разница между значениями данных в двух таблицах DB2 с разными структурами таблиц

У меня есть две таблицы db2 на мэйнфрейме «старая» и «новая». Эти таблицы содержат 1 миллиард записей каждая с 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

Таким образом, в приведенном выше примере «старый» и «новый» имеют столбцы B и C, которые необходимо сравнивать на предмет различий, а строки, которые имеют разные значения в общих столбцах, должны быть записаны в другую таблицу, в которой есть все общие столбцы.

Я читал о функции except & union, которую можно использовать, но эти дополнительные ограничения (разница в структуре таблицы и не все идентификаторы присутствуют в обоих по порядку) делают запрос слишком сложным.

Есть ли более простой способ сделать это? Я не могу установить на мэйнфрейм какое-либо программное обеспечение / сторонние инструменты. Пожалуйста помоги.

Спасибо.


person Aditi Singh    schedule 02.01.2018    source источник


Ответы (1)


Это мой общий способ сравнения таблиц.

Как получить только те строки таблицы (db1), которых нет в другой таблице (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 

Если вам нужно сохранить результаты, оберните приведенное выше в оператор создания таблицы.

person danny117    schedule 02.01.2018