sql配置单元完全外部联接,在同一个键上有4个表,模式不同

6tqwzwtp  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(301)

我正在尝试对4个配置单元表执行完全外部联接。连接键是相同的,但4个表的模式不同。我想为4个表中的所有id生成所有列值。但是id列应该只出现一次,并且包含所有值,而不是4次(每个值来自一个表)
查询1

select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id;

计数=2787037
查询2

select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id
group by f.id,u.id,v.id,v_in.id, f.name, f.amt, f.add, u.dt, u.ts, v.ea,v.rd, 
v_in.c1,v_in.c2,v_in.c3,v_in.c4,v_in.c5;

计数=2787037
如何从一列中的4个表生成id的所有值,以及其他列值?
有没有更好的办法?

35g0bw71

35g0bw711#

你应该只选择你想要的列。我想你想要 coalesce() :

select coalesce(f.id, u.id, v.id, v_in.id) as id,
       f.name, f.amt, f.add, u.dt, u.ts, v.ea, v.rd, 
       v_in.c1, v_in.c2, v_in.c3, v_in.c4, v_in.c5
from . . .;

full outer join 你需要很多 coalesce() 学生:

select . . .
from table1 f full join
     table2 u
     on f.id = u.id full join
     table3 v
     on v.id in (f.id, u.id) full join
     table4 v_in
     on v_in.id in (f.id, u.id, v.id);

相关问题