with join1 as (
select coalesce(t1.date, t2.date) as date
, coalesce(fam1, fam2) as fam
, coalesce(famcnt1, 0) as famsct1
, coalesce(famcnt2, 0) as famsct2
from table1 as t1
full outer join table2 as t2
on (t1.date = t2.date and fam1 = fam2)
)
select coalesce(t1.date, t3.date) as date
, coalesce(fam, fam3) as fam
, coalesce(famcnt1, 0) as famsct1
, coalesce(famcnt2, 0) as famsct2
, coalesce(famcnt3, 0) as famsct3
from join1 as t1
full outer join table3 as t3
on (t1.date = t3.date and fam = fam3)
你可以用 full outer join . 然而, union 与 left join s通常看起来更干净:
select df.date, df.name,
coalesce(t1.famcnt1, 0) as famcnt1,
coalesce(t2.famcnt2, 0) as famcnt2,
coalesce(t3.famcnt3, 0) as famcnt3
from ((select date, fam1 from table1
) union -- on purpose to remove duplicates
(select date, fam1 from table2
) union -- on purpose to remove duplicates
(select date, fam1 from table3
)
) df left join
table1 t1
on t1.date = df.date and t1.name = df.name left join
table2 t2
on t2.date = df.date and t2.name = df.name left join
table3 t3
on t3.date = df.date and t3.name = df.name;
2条答案
按热度按时间euoag5mw1#
分两步使用完全外连接,例如。
im9ewurl2#
你可以用
full outer join
. 然而,union
与left join
s通常看起来更干净:如果你对
NULL
而不是0
,那么不COALESCE()
根本就不需要这些。