我有几张桌子.我想加入反对.我只想查看其中至少有一个表匹配的记录
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也很棒.
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)
;
最佳答案 您需要使用过滤器进行FULL OUTER JOIN或LEFT JOIN:
select f.*, a.*, b.*
from foo f full outer join
a
on a.id = f.id full outer join
b
b.id = f.id
where a.id is not null or b.id is not null;