получить все строки из A плюс пропущенные строки из B - PullRequest
0 голосов
/ 15 января 2020

Это кажется таким очевидным, но у меня не получается.

В Teradata SQL, как получить все строки из таблицы A, плюс те из таблицы B, которые не встречаются в таблице A, на основе ключа ключ поля?

Это, должно быть, задавали тысячу раз. Но, честно говоря, я не нахожу ответ. Полное внешнее объединение, кажется, дает мне повторяющиеся результаты "внутреннего соединения".

- Редактировать, основываясь на первом комментарии (спасибо) - поэтому, если бы я сделал

    select * from A
    union all 
    select * from B
        left join A
               on A.key = B.key
            where A.key IS NULL

, я предполагаю, что будет работать (не проверено), но это самый эффективный способ?

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Ваша версия в порядке. , , если вы выберете правильные столбцы:

select A.* from A
union all 
select B.*
from B left join
     A
     on A.key = B.key
 where A.key IS NULL;

Я думаю, что Teradata хорошо справляется с оптимизацией объединений. Тем не менее, EXISTS также очень разумный вариант.

2 голосов
/ 15 января 2020

Иногда EXISTS или NOT EXISTS работает лучше, чем объединения:

select * from A
union all 
select * from B
where not exists (
  select 1 from A
  where A.key = B.key
)

Я предполагаю, что столбцы key уже проиндексированы.

...