You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列不全相同的三张SQL表合并为包含所有列的统一结果表

错误原因分析
  • 第一种FULL OUTER JOIN方案报错:你用SELECT *查询时,三张表存在重名字段(比如#no_change_or_transfer和#left_in_aug都有prvs_loan_num、prvs_wac等字段),数据库无法识别重复列名,因此抛出错误。
  • 第二种UNION方案报错:UNION操作要求所有子查询返回的列数量、对应列的数据类型完全一致,你三张表列数分别为6、3、3,不满足匹配规则,因此报错。
正确实现方案

你可以通过补全空缺字段+UNION ALL实现需求,不需要关联操作,逻辑简单且对大表性能更友好,代码如下:

SELECT *
INTO #month_over_month
FROM (
    -- 直接取已有全字段的存量表
    SELECT prvs_loan_num, prvs_wac, prvs_tni, cur_loan_num, cur_wac, cur_tni FROM #no_change_or_transfer
    UNION ALL
    -- 8月流失表补全cur前缀的空缺字段为NULL
    SELECT prvs_loan_num, prvs_wac, prvs_tni, NULL AS cur_loan_num, NULL AS cur_wac, NULL AS cur_tni FROM #left_in_aug
    UNION ALL
    -- 9月新增表补全prvs前缀的空缺字段为NULL
    SELECT NULL AS prvs_loan_num, NULL AS prvs_wac, NULL AS prvs_tni, cur_loan_num, cur_wac, cur_tni FROM #joined_in_sept
) AS combined

如果prvs_和cur_前缀的字段各有20个,只需要对应补全20个NULL值即可,无需修改逻辑。

方案说明
  • 用UNION ALL而非UNION:三张表的数据不存在重叠,不需要去重,UNION ALL跳过了去重排序步骤,对100万行的大表执行效率高很多。
  • 无需关联操作:避免了大表关联的性能开销,也不会出现JOIN可能导致的字段匹配错误问题。

内容的提问来源于stack exchange,提问作者gernworm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:36:07