Я разрабатываю запрос UNION для объединения двух таблиц с информацией о клиентах в базе данных Oracle 11g.Первая таблица a является «основным» источником, вторая таблица b является дополнительным источником с новыми и дублированными записями.
Дубликатыв b невозможно устранить с помощью UNION на самом деле неравных полей, таких как автоинкрементный идентификатор, который необходимо выбрать.
Таблица a
ID CUSTOMER_NUMBER NAME STREET
1 4711 Dirk Downstreet 4
2 4721 Hans Mainstreet 5
Таблица b
ID CUSTOMER_NUMBER NAME STREET
44 4711 Dirk Downstreet 4 <== Duplicate
4 4741 Harry Crossroad 9 <== new
Ожидаемый результат
ID CUSTOMER_NUMBER NAME STREET DATASOURCE
1 4711 Dirk Downstreet 4 SAP <== from a
2 4721 Hans Mainstreet 5 SAP <== from a
4 4741 Harry Crossroad 9 MANUAL <== from b
Я очень доволен следующей - упрощенной - пробной версией:
SELECT CUSTOMER_NUMBER,
MAX(ID) KEEP (DENSE_RANK FIRST ORDER BY DATASOURCE DESC) ID,
MAX(NAME) KEEP (DENSE_RANK FIRST ORDER BY DATASOURCE DESC) NAME,
MAX(STREET) KEEP (DENSE_RANK FIRST ORDER BY DATASOURCE DESC) STREET,
FROM
(SELECT "ID","CUSTOMER_NUMBER","NAME","STREET", 'SAP' as DATASOURCE FROM CUSTOMERS
UNION ALL
SELECT "ID","CUSTOMER_NUMBER","NAME","STREET", 'MANUAL' as DATASOURCE FROM CUSTOMERS_MANUAL) united
group by CUSTOMER_NUMBER
Но у меня естьВЫБЕРИТЕ каждое поле с помощью DENSE_RANK FIRST ORDER BY DATASOURCE DESC, которые составляют около 20 полей ...
Кто-нибудь может показать мне лучший подход?