如何在全连接中不丢失记录

How to not lose records in full join

假设我有两个 table; tableA和table如下所示:

A
Color   ID
Blue    1
Green   2
Red     3

B
Color   ID
Blue    1
Brown   2
Red     3

如果我尝试使用完全连接来连接它们,结果将取决于我在 select 语句中使用的 table。例如,以下查询将产生以下结果

select A.color, count(*)
from A 
full join B on a.color = B.color
group by 1
order by 1

color   count
Blue    1
Green   1
Red     1
        1

如果我决定在 select 语句中使用 B.color 而不是 A.color,我将得到以下结果:

color   count
Blue    1
Brown   1
Red     1
        1

如何让结果集包含所有颜色值。我知道我可以使用 unionall 来完成,并且我可以在 select 语句中使用 case 语句来在另一个为 null 时使用一个,但是是否有另一种更简洁的方法来完成此操作?

谢谢, 本

使用 coalesce 从另一个 table 中获取值,以防值存在于一个 table 而不是另一个中。

select coalesce(A.color,B.color) as color, count(*)
from A 
full join B on a.color = B.color
group by 1
order by 1