Полное внешнее соединение из строк одной таблицы на основе значений из другой таблицы - PullRequest
0 голосов
/ 26 мая 2018

У меня есть эти 2 таблицы:

CONTS
ID      SRC_ID      VAL
----    ------      ---
1000    100           2
1000    100           4
1000    100           8

1000    101           2
1000    101           0
1000    101           8

1000    102           2
1000    102           4
1000    102           8

1000    103           3
1000    103           5
1000    103           8

1001    110          12
1001    110           5

1001    111          12

and VALID:
ID      SRC_ID  VALID_ID
----    ------  --------
1000    101          102
1001    110          111

Мне нужен запрос SQL, который объединяет 2 таблицы с миллионами строк.Есть 2 таблицы CONTS и VALID.В таблице VALID столбец ID является первичным ключом (для уникального идентификатора есть только одна строка).

Мне нужно получить такой результат:

ID    SRC_ID1  VAL1  SRC_ID2  VAL2
----  -------  ----  -------  ----
1000      101     2      102     2
1000     NULL  NULL      102     4
1000      101     0     NULL  NULL
1000      101     8      102     8

1001      110    12      111    12
1001      110     5     NULL  NULL

SQL должен работатьв терадате или оракуле.Спасибо.

1 Ответ

0 голосов
/ 27 мая 2018

Я почти понял, но не знаю, является ли это оптимальным решением с точки зрения производительности: SELECT COALESCE(T1.ID, T2.ID) AS ID, T1.SRC_ID, T1.VAL, T2.SRC_ID AS SRC_ID, T2.VAL FROM ( SELECT v.ID, v.SRC_ID, c1.VAL FROM VALID v LEFT JOIN CONTS c1 ON (c1.ID = v.ID and c1.SRC_ID = v.SRC_ID) ) T1 FULL OUTER JOIN ( SELECT v.ID, v.VALID_ID AS SRC_ID, c1.VAL FROM VALID v LEFT JOIN CONTS c1 ON (c1.ID = v.ID and c1.SRC_ID = v.VALID_ID) ) T2 ON (T2.ID = T1.ID and T2.VAL = T1.VAL)

...