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

C#中基于共同列合并两个DataTable?Merge方法未达预期

解决Power Query中表关联保留主表所有行的问题

看起来你是把Power Query里的「行合并」和「列关联」搞混啦~你用的Table1.Merge(Table2)其实是追加两个表的行的操作,而你需要的是按IntervalID做左外连接(保留Table1的所有行,匹配Table2的Name,不匹配的显示NULL)。

问题原因

默认情况下,如果你用了错误的合并方式(比如内连接或者行追加),就只会得到匹配的行或者重复的行,达不到你要的效果。你需要明确指定左外连接的关联类型。

正确的解决方法

这里给你两种常用的实现方式:

方法1:直接用Table.Join生成结果

这个函数可以直接关联两个表并返回展开后的结果:

Table.Join(
    Table1,                  // 左表(要保留所有行的主表)
    {"IntervalID"},          // 左表用于匹配的列
    Table2,                  // 右表
    {"IntervalID"},          // 右表用于匹配的列
    JoinKind.LeftOuter       // 指定左外连接类型
)

方法2:先关联再展开(更灵活,适合多列匹配)

如果后续需要处理更多关联列,推荐用Table.NestedJoin先关联,再展开需要的列:

let
    // 第一步:按IntervalID左外连接两个表
    JoinedTables = Table.NestedJoin(
        Table1,
        {"IntervalID"},
        Table2,
        {"IntervalID"},
        "MatchedTable2Data",  // 存储关联结果的列名
        JoinKind.LeftOuter
    ),
    // 第二步:展开Table2中的Name列
    ExpandedNameColumn = Table.ExpandTableColumn(
        JoinedTables,
        "MatchedTable2Data",
        {"Name"},  // 要展开的列
        {"Name"}   // 展开后的列名
    )
in
    ExpandedNameColumn

这两种方法都能得到你想要的结果:IntervalID包含1、2、3,对应的Name为XXX、NULL、NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:02:37