如何在全连接中不丢失记录
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
假设我有两个 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