合并并非所有列都存在的三个表

Union three tables where not all columns exist

我认为这将是一个相当简单的过程,但我遇到了 unioning/merging 三个 table 问题。每个 prvs_cur_ 前缀大约有 20 个左右的属性,但我选择只为问题添加一些属性。

Table 1,#no_change_or_transfer 大约有 100 万行:

prvs_loan_num  | prvs_wac  | prvs_tni  | cur_loan_num  | cur_wac  | cur_tni
---------------|-----------|-----------|---------------|----------|---------
 86            | 2.3       | 2000      | 86            |  2.5     |  2000

Table 2,#left_in_aug 大约有 20,000 行:

prvs_loan_num  | prvs_wac  | prvs_tni  
---------------|-----------|-----------
 10            | 3.1       | 1500      

Table 3,#joined_in_sept 大约有 20,000 行:

cur_loan_num   | cur_wac   | cur_tni  
---------------|-----------|-----------
 22            | 3.5       | 1700      

我想要 table 看起来像这样:

prvs_loan_num  | prvs_wac  | prvs_tni  | cur_loan_num  | cur_wac  | cur_tni
---------------|-----------|-----------|---------------|----------|---------
 86            | 2.3       | 2000      | 86            |  2.5     |  2000
 10            | 3.1       | 1500      | NULL          |  NULL    |  NULL
 NULL          | NULL      | NULL      | 22            |  3.5     |  1700        

我试过这样的 full outer join,但收到一条错误消息,指出每个 table 中的列名必须是唯一的:

SELECT              *
INTO                #month_over_month
FROM                #no_change_or_transfer a
FULL OUTER JOIN     #left_in_aug b
    ON              a.prvs_loan_number = b.prvs_loan_number
FULL OUTER JOIN     #joined_in_sept c
    ON              a.cur_loan_number = c.cur_loan_number

我也试过这个并收到一条错误消息,指出所有使用 UNION 的查询在其目标列表中必须具有相同数量的表达式:

SELECT      x.*
    INTO    #month_over_month
    FROM    (SELECT * FROM #no_change_or_transfer
             UNION
             SELECT * FROM #left_in_aug
             UNION
             SELECT * FROM #joined_in_sept) x

联合中的所有列必须在每个查询中匹配。

明确指定列名并在必要时提供 null

请注意,列名仅由第一个查询确定。

 select prvs_loan_num, prvs_wac, prvs_tni, cur_loan_num, cur_wac, cur_tni
 from #no_change_or_transfer
 union all
 select prvs_loan_num, prvs_wac, prvs_tni, null, null, null
 from #left_in_aug
 union all
 select null, null, null, cur_loan_num, cur_wac, cur_tni 
 from #joined_in_sept

您可以使用 UNION ALL 合并表。例如:

select prvs_loan_num, prvs_wac, prvs_tni, cur_loan_num, cur_wac, cur_tni
from #no_change_or_transfer
union all
select prvs_loan_num, prvs_wac, prvs_tni, null, null, null
from #left_in_aug
union all
select null, null, null, cur_loan_num, cur_wac, cur_tni
from #joined_in_sept