在配置单元中连接多个表

nxagd54h  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(304)

下面是数据集

Table1
col1,col2
key1,k1
key2,k2
key3,k3

Table2
col1,col3
key1,k11
key2,k22
key4,k44

Table3
col1,col4
key1,k111
key2,k222
key5,k555

我需要基于col1联接3个表。下面是我的问题
从表1 a全外接表2 b全外接表3 c中选择a.col1、a.col2、b.col3、c.col4;
预期输出如下所示
预期产量:

col1,col2,col3,col4
key1,k1,k11,k111
key2,k2,k22,k222
key3,k3,   ,
key4,  ,k44,
key5,  ,   ,k555
uxhixvfz

uxhixvfz1#

根据您想要的结果,您需要联接col1上的所有表。
为了确保col1中始终有一个值,需要 coalesce 将它们放在一起(coalesce将为您提供第一个非空值)。
要将其他列缝合在一起(并用空格替换null,请将coalesce与 concat :
综合起来:

select
coalesce(t1.col1,t2.col1,t3.col1) as col1,
concat(coalesce(t1.col2,' '),',',coalesce(t2.col2,' '),',',coalesce(t3.col2,' '))
from
table1 t1
full join table2 t2
  on t1.col1 = t2.col1
full join table3 t3
  on t1.col1 = t3.col1
vshtjzan

vshtjzan2#

既然您正在进行完全的外部连接,那么这样做将是一个好主意 COALESCE 对于列 col1 比如:

select 
    COALESCE(a.col1, b.col1, c.col1) as col1,
    a.col2,
    b.col3,
    c.col4
from 
    table1 a 
    full outer join table2 b 
      on t1.col1 = t2.col1
    full outer join table3 c
      on t1.col1 = t3.col1;

为了避免结果集中的笛卡尔积,我们还需要有连接条件。

相关问题