У меня есть несколько таблиц. Я хотел бы присоединиться против. Я хочу видеть записи, в которых есть совпадение хотя бы для одной из этих таблиц
insert into foo values
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8);
insert into a values
(1),
(2),
(3);
insert into b values
(3),
(4),
(5),
(6);
желаемый вывод:
id id id
1 1 (null)
2 2 (null)
3 3 3
4 (null) 4
5 (null) 5
6 (null) 6
Обычно я бы делал это, используя WHERE EXISTS (например: ниже), но это не поддерживается в SparkSQL. Какой самый эффективный способ добиться этого? Я бы предпочел полагаться на мое объединение, чтобы определить результат, а не фильтровать набор результатов. Кроме того, я не ограничиваюсь использованием SparkSQL, API-интерфейс dataframe также хорош.
select *
from foo
left join a on foo.id = a.id
left join b on foo.id = b.id
where exists (select 1 from a x where foo.id = x.id)
or exists (select 1 from b x where foo.id = x.id)
;