如何合并部分ID匹配但非全部匹配的两张数据表?
合并存在部分匹配ID的两张数据表
现有两张数据表,二者存在部分匹配的ID,但并非所有ID在两张表中都存在,需要将它们合并为包含所有记录的结果表,具体示例如下:
表1
Name Money ID Bob 500 1 Nick 600 2 Kim 575 3
表2
Name Fees ID Bob 200 1 Nick 250 2 Ian 100 4
期望输出
Name Money Fees ID Bob 500 200 1 Nick 600 250 2 Kim 575 3 Ian 100 4
解决方案(SQL实现)
使用**全外连接(FULL OUTER JOIN)**可以直接实现需求,它会保留两张表中的所有记录,匹配的ID合并对应字段,不匹配的字段留空。同时用COALESCE函数确保Name和ID字段始终取到有效值:
SELECT COALESCE(t1.Name, t2.Name) AS Name, t1.Money, t2.Fees, COALESCE(t1.ID, t2.ID) AS ID FROM 表1 t1 FULL OUTER JOIN 表2 t2 ON t1.ID = t2.ID;
说明:
FULL OUTER JOIN:保留两张表中所有行,无论是否在另一张表中有匹配的IDCOALESCE(a, b):返回参数中的第一个非空值,用来处理某张表无对应记录时,Name和ID能从另一张表取到正确值- 查询结果中无匹配的字段会显示为NULL,表格展示时呈现为空,和期望输出一致
解决方案(Excel/Power Query实现)
如果用Excel处理,Power Query的全外连接操作更高效:
- 将两张表分别导入Power Query(数据选项卡 → 自表格/区域)
- 选中其中一张表,点击「合并查询」,选择另一张表,关联列选
ID,连接类型选「完全外部」 - 展开合并后的列,删除重复的Name列,通过填充或
COALESCE逻辑保留正确的Name - 将处理后的结果加载回Excel,即可得到目标表格
内容的提问来源于stack exchange,提问作者brockey2sockey
相关产品推荐
相关产品推荐

