Способы объединения данных из двух таблиц в Oracle - PullRequest
0 голосов
/ 21 октября 2019

У меня есть приведенные ниже примеры данных в двух таблицах:

Table1

Item Loc Hierarchy  Val4
I1   L1  Item       D1
I2   L2  Item       D2
I2   L3  Item       D3

Table2

 Loc Hierarchy Val1 Val2 Val3 
 L1  ' '       A1   B1   C1   
 L4  ' '       A4   B4   C4   

В основном -

  • Столбец иерархии будет иметь «Элемент» (в Таблице 1) и «» (в Таблице 2).

  • Может существовать несколько комбинаций Item @ Loc.

  • Дополнительные следующие возможные сценарии -

Одиночный Loc может иметь записи как в Table1, так и в Table2

Конкретный Loc может иметь записи либо в Table1, либо в Table2.

Ожидаемый результат -

Item Loc Hierarchy Val1 Val2 Val3 Val4
I1   L1  Item      A1    B1   C1   D1
I2   L2  Item      null null null  D2
I2   L3  Item      null null null  D3
     L4  ' '       A4   B4   C4   null

Как объединитьданные и достичь желаемого результата? Полное внешнее соединение? Существуют ли другие альтернативные методы, которые являются эффективными с точки зрения производительности, ИЛИ способ повышения полного запроса на внешнее соединение. Так как это подмножество более крупного запроса, поэтому, как только я достигну этого результата, я должен использовать этот набор данных для обновления другой таблицы, содержащей около 100 миллионов записей (следовательно, для поиска блоков, эффективных по производительности).

Спасибо заранее!

1 Ответ

2 голосов
/ 21 октября 2019

Выглядит как полное внешнее соединение:

SQL> with
  2  tab1 (item, loc, hierarchy, val4) as
  3    (select 'I1', 'L1', 'Item', 'D1' from dual union all
  4     select 'I2', 'L2', 'Item', 'D2' from dual union all
  5     select 'I2', 'L3', 'Item', 'D3' from dual
  6    ),
  7  tab2 (loc, hierarchy, val1, val2, val3) as
  8    (select 'L1', null, 'A1', 'B1', 'C1' from dual union all
  9     select 'L4', null, 'A4', 'B4', 'C4' from dual
 10    )
 11  select a.item,
 12    nvl(a.loc, b.loc) loc,
 13    nvl(a.hierarchy, b.hierarchy) hierarchy,
 14    b.val1,
 15    b.val2,
 16    b.val3, a.val4
 17  from tab1 a full outer join tab2 b on a.loc = b.loc
 18  order by item, loc;

ITEM LOC HIER VAL1 VAL2 VAL3 VAL4
---- --- ---- ---- ---- ---- ----
I1   L1  Item A1   B1   C1   D1
I2   L2  Item                D2
I2   L3  Item                D3
     L4       A4   B4   C4

SQL>
...