首页 > 解决方案 > SQL - 用一些不同和一些相同的列连接两个表

问题描述

我有两张桌子,看起来像这样:

表A

-------
AGENCY_ID | ISSUE_YEAR | AMOUNT_ISSUED
00101     | 1996       | 3000
00123     | 1996       | 4000
00165     | 1996       | 3450
00231     | 1996       | 6000

表 B

-------
AGENCY_ID | ISSUE_YEAR | AMOUNT_EXPIRED
00101     | 1996       | 4000
00101     | 1997       | 2550
00123     | 1996       | 1250
00123     | 1997       | 1300
00165     | 1996       | 3333
00165     | 1997       | 3124
00231     | 1996       | 1232
00231     | 1997       | 2422

应该将其连接在一起,合并共享列并将缺失值填充为 0,如下所示:

表JOINED_A_B

-------
AGENCY_ID | ISSUE_YEAR | AMOUNT_EXPIRED | AMOUNT_ISSUED   
00101     | 1996       | 4000           | 3000
00101     | 1997       | 2550           | 0
00123     | 1996       | 1250           | 4000
00123     | 1997       | 1300           | 0
00165     | 1996       | 3333           | 3450
00165     | 1997       | 3124           | 0
00231     | 1996       | 1232           | 6000
00231     | 1997       | 2422           | 0

我曾尝试使用UNION它们来连接它们,但我的结果表的维度始终与运算符左侧的维度相同UNIONSELECT A UNION SELECT B结果表中没有列AMOUNT_EXPIRED)。

我应该如何正确地做到这一点?也许联盟不是一个好的选择?

谢谢!

标签: sql

解决方案


你似乎想要left joincoalesce()

select b.*, coalesce(a.amount_issued, 0) as amount_issued
from b left join
     a
     on b.agency_id = a.agency_id and b.issue_year = a.issue_year;

推荐阅读