sql – 如何只显示几个表中至少有一个表匹配的记录?

我有几张桌子.我想加入反对.我只想查看其中至少有一个表匹配的记录

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;
点赞