У меня есть таблица с двумя видами источников в столбце источника, один внешний и другой внутренний. Моё требование - найти одну и ту же запись между внешним и внутренним на основе COLUMNA и COLUMNB. Если внутренняя и внешняя записи совпадают для COLUMNA, мне нужно взять соответствующий идентификатор (значение столбца ID всегда будет уникальным) как из внутренней, так и из внешней. У меня в таблице миллионы записей. И в каждом источнике будут дубликаты записей , Я дал запрос, который написан (я использую UNION ALL для повышения производительности, даже если в окончательном выводе появится дубликат ID), но он занимает 2 часа. Так что я все равно могу переписать этот запрос, я использую DB2 здесь.
Например, если ниже моя входная запись.
ID COLUMNA COLUMNB SOURCE
1 DELL Finland INTERNAL
2 CTS USA INTERNAL
3 CTS AUST INTERNAL
4 TCS FIN INTERNAL
5 CTS SING INTERNAL
6 IBM NEWZ EXTERNAL
7 CTS AUST EXTERNAL
8 TCS Finland EXTERNAL
9 TCS Finland EXTERNAL
Ожидаемый результат
Запрос, который уже написан, приведен ниже.
select ID from TABLE where COLUMNA in(
(select SRC.COLUMNA from TABLE SRC,TABLE REF
where SRC.SOURCE<>'EXTERNAL' and REF.SOURCE='EXTERNAL' and SRC.COLUMNA=REF.COLUMNA))
UNION ALL
select ID from TABLE where COLUMNB in(
(select SRC.COLUMNB from TABLE SRC,TABLE REF
where SRC.SOURCE<>'EXTERNAL' and REF.SOURCE='EXTERNAL' and
SRC.COLUMNB=REF.COLUMNB))