配置单元中的左联接未返回预期结果

bvjxkvbb  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(317)

我有3个表,一个是只包含日期的datetable,另外2个有如下数据。
日期表:

表1:

表2:

我用日期表做左连接,如下所示:

select * from 
(select distinct t.d,
coalesce(tab1.name,tab2.name,"") as name,
coalesce(tab1.id,tab2.id,"") as id,
coalesce(tab1.tgt_cnt,0) as tgt_cnt,
coalesce(tab2.a_cnt,0) as a_cnt,
coalesce(tab2.b_cnt,0) as b_cnt,
coalesce(tab2.c_cnt,0) as v_cnt
from datetable t
LEFT JOIN (select * from table1) tab1 on t.d = tab1.dt
LEFT JOIN (select * from table2) tab2 on t.d = tab2.dt) a
where (tgt_cnt <> 0 or a_cnt <> 0 or b_cnt <> 0 or c_cnt <> 0);

我得到以下结果。

我的问题是汤姆的唱片怎么了。我不知道为什么cg和bob重复了两次。我的问题有点不对劲。
你能不能建议一下为什么汤姆唱片不在左边加入,为什么cg和bob在重复。
我期待以下结果。

非常感谢你的帮助。
谢谢,巴布

x759pob2

x759pob21#

coalesce(tab1.name,tab2.name,"") as name 将用表1中的名称替换表2中的名称,因此tom从未出现,因为它被cg或bob替换。
我猜你在这里想要达到什么目的。。。好像你想把表1和表2结合起来。我认为完全加入是合适的。

select * from (
select distinct
    coalesce(t1.dt, t2.dt) as dt,
    coalesce(t1.desc, t2.desc) as desc, 
    coalesce(t1.name, t2.name) as name, 
    coalesce(t1.id, t2.id) as id,
    coalesce(t1.tgt_cnt, 0) as tgt_cnt,
    coalesce(t2.a_cnt, 0) as a_cnt,
    coalesce(t2.b_cnt, 0) as b_cnt,
    coalesce(t2.c_cnt, 0) as c_cnt
from table1 t1
full join table2 t2
on t1.name = t2.name and t1.dt = t2.dt
) a
where (tgt_cnt <> 0 or a_cnt <> 0 or b_cnt <> 0 or c_cnt <> 0);

这将给

dt              desc    name    id      tgt_cnt a_cnt   b_cnt   c_cnt
6/29/2020       NULL    Tom     3       0       0       0       1
6/29/2020       AA      CG      1       3       1       1       0
6/29/2020       AA      Bob     2       3       0       0       0

相关问题