【n8n教程】:Merge节点,合并多个数据源!

在自动化工作流中,我们经常需要处理来自多个数据源的数据。Merge节点就是n8n中用来合并、组合这些数据的强大工具。无论是合并两个API的响应,还是将用户信息与订单数据关联,Merge节点都能帮你轻松解决。


🎯 Merge节点是什么?

Merge节点的核心功能是将来自不同数据流的数据合并成一个输出流。简单来说,它解决的是这样的问题:

工作原理

Merge节点通常有两个输入(Input 1 和 Input 2),你可以把不同来源的数据接入这两个输入,然后选择合并方式。n8n 1.49.0版本后,还支持多达10个输入,让数据合并更灵活。


🛠️ Merge节点的四大合并模式

Merge节点提供了多种合并策略,每种都适合不同的场景。让我们逐个了解:

模式1️⃣:Append(追加) - 直接拼接所有数据

适用场景:你只是想把两个数据集连接在一起,不需要任何匹配或关联逻辑。

工作方式

示例


模式2️⃣:Combine(组合) - 智能匹配与关联 ⭐ 最常用

这是Merge节点最强大的功能,提供多种子模式:

a) Matching Fields(按字段匹配) - 最常用!

适用场景:你有一个共同的标识符(如ID、Email),需要将匹配的项目融合。

工作方式

匹配输出类型(决定输出哪些项目):

输出类型说明SQL对标场景
Keep Matches只保留两边都有的项目INNER JOIN用户既有订单的数据
Keep Non-Matches只保留两边都没有的项目反向匹配特殊业务逻辑
Keep Everything保留所有项目,有匹配则关联OUTER JOIN完整数据视图
Enrich Input 1保留Input 1的所有,用Input 2数据补充LEFT JOIN用户信息 + 订单数据
Enrich Input 2保留Input 2的所有,用Input 1数据补充RIGHT JOIN订单数据 + 用户信息

实战例子


    
    
    
  Input 1 (客户表):
[
  { customer_id: '1', name: '张三' },
  { customer_id: '2', name: '李四' },
  { customer_id: '3', name: '王五' }
]

Input 2 (订单表):
[
  { customer_id: '1', order_id: 'ORD001', amount: '¥1000' },
  { customer_id: '2', order_id: 'ORD002', amount: '¥500' }
]

使用 Enrich Input 1(按customer_id匹配)的结果:
[
  { 
    customer_id: '1', 
    name: '张三', 
    order_id: 'ORD001', 
    amount: '¥1000' 
  },
  { 
    customer_id: '2', 
    name: '李四', 
    order_id: 'ORD002', 
    amount: '¥500' 
  },
  { 
    customer_id: '3', 
    name: '王五' 
    // 没有订单数据
  }
]

b) Position(按位置) - 逐一对应

适用场景:两个数据集在相同位置的项目是相关的(比如排序后的列表)。

工作方式

示例


    
    
    
  Input 1: [{name: '张三'}, {name: '李四'}]
Input 2: [{score: 90}, {score: 85}]

Output: 
[
  {name: '张三', score: 90},
  {name: '李四', score: 85}
]

c) All Possible Combinations(所有可能的组合) - 笛卡尔积

适用场景:你需要生成所有可能的组合方案(如A/B测试的广告组合、生成变体等)。

工作方式

示例


    
    
    
  Input 1 (标题): [{title: 'A'}, {title: 'B'}, {title: 'C'}]
Input 2 (图片): [{img: '图1'}, {img: '图2'}]

Output: 6个组合
[
  {title: 'A', img: '图1'},
  {title: 'A', img: '图2'},
  {title: 'B', img: '图1'},
  {title: 'B', img: '图2'},
  {title: 'C', img: '图1'},
  {title: 'C', img: '图2'}
]

模式3️⃣:SQL Query(SQL查询) - 高级用户专用

适用场景:需要复杂的数据操作,简单的合并模式无法满足。

工作方式

示例


    
    
    
  SELECT 
  i1.customer_id, 
  i1.name, 
  i2.order_id,
  CASE
 
    WHEN
 i2.amount > 1000 THEN '大单'
    ELSE
 '小单'
  END
 as order_type
FROM
 input1 i1
LEFT
 JOIN input2 i2 ON i1.customer_id = i2.customer_id
WHERE
 i1.customer_id != '999'

模式4️⃣:Choose Branch(选择分支) - 条件分支

适用场景:需要基于条件选择使用哪个输入的数据。

工作方式

这在流程控制中很有用,但不是真正的"合并"。


🔧 核心参数说明

关键配置项

参数说明例子
Mode(模式)选择合并方式:Append/Combine/SQL Query/Choose BranchCombine
Combine By组合方式:Matching Fields/Position/All CombinationsMatching Fields
Fields to Match指定匹配的字段名Input 1: id, Input 2: user_id
Output Type输出类型(仅Matching Fields)Keep Matches / Enrich Input 1
Number of Inputs输入数量(1.49.0+支持2-10个)3

高级选项(Options)


📖 快速上手:3个实战步骤

步骤1️⃣:准备你的数据源

在Merge节点之前,需要有两个(或多个)数据来源:


    
    
    
  // 数据源1:Code节点或HTTP Request输出
// 客户信息

return
 [
  { json: { customer_id: '1', name: '张三' } },
  { json: { customer_id: '2', name: '李四' } }
];

// 数据源2:

// 订单信息

return
 [
  { json: { customer_id: '1', amount: '¥1000' } },
  { json: { customer_id: '2', amount: '¥500' } }
];

步骤2️⃣:添加Merge节点

在n8n编辑器中:

  1. 1. 点击 + 添加节点
  2. 2. 搜索 "Merge""Join"
  3. 3. 点击Merge节点添加到画布

步骤3️⃣:配置合并规则

根据你的需求选择模式:

例1:按ID匹配客户和订单


    
    
    
  Mode → Combine
Combine By → Matching Fields
Input 1 Field → customer_id
Input 2 Field → customer_id
Output Type → Enrich Input 1

例2:简单追加两个数据集


    
    
    
  Mode → Append
Number of Inputs → 2

💡 常见问题解决

Q1:为什么有些项目没有被合并?

A: 检查匹配字段的值是否完全相同。n8n默认进行严格匹配,空值、大小写差异都会导致不匹配。

解决方案

Q2:两个输入的项目数量不一样怎么办?

A: 取决于你选择的输出类型:

Q3:字段名不一样但代表同一个东西怎么办?

A: Merge节点按字段名匹配,不按含义匹配。如果Input 1用 id,Input 2用 user_id,需要在匹配配置中分别指定:

Q4:如何处理合并后字段重复的情况?

A: 设置 Clash Handling


🚀 完整工作流示例:客户订单合并

以下是一个从头到尾的完整可执行工作流,包含客户信息和订单数据的合并:

工作流流程图


    
    
    
  [客户信息] ──┐
            ├──→ [Merge节点] ──→ [输出合并后的数据]
[订单信息] ──┘

完整工作流JSON代码

将以下代码复制到n8n中导入:

  1. 1. 登录你的n8n实例
  2. 2. 点击 Create 新建工作流
  3. 3. 点击 Code 或在画布右侧点击导入按钮
  4. 4. 粘贴以下JSON代码,点击导入

    
    
    
  {
  "name"
: "【n8n教程】 Merge合并数据示例",
  "active"
: false,
  "nodes"
: [
    {

      "parameters"
: {
        "jsCode"
: "return [\n  { json: { customer_id: '1', name: '张三' } },\n  { json: { customer_id: '2', name: '李四' } },\n  { json: { customer_id: '3', name: '王五' } }\n]"
      }
,
      "id"
: "客户信息",
      "name"
: "客户信息",
      "type"
: "n8n-nodes-base.code",
      "typeVersion"
: 2,
      "position"
: [250, 300]
    }
,
    {

      "parameters"
: {
        "jsCode"
: "return [\n  { json: { customer_id: '1', order_id: 'ORD001', order_amount: '¥1000', product: '笔记本' } },\n  { json: { customer_id: '2', order_id: 'ORD002', order_amount: '¥500', product: '鼠标' } }\n]"
      }
,
      "id"
: "订单信息",
      "name"
: "订单信息",
      "type"
: "n8n-nodes-base.code",
      "typeVersion"
: 2,
      "position"
: [250, 500]
    }
,
    {

      "parameters"
: {
        "mode"
: "combine",
        "combineBy"
: "fields",
        "fieldsToMatchOptions"
: {
          "fields"
: [
            {

              "input1"
: "customer_id",
              "input2"
: "customer_id"
            }

          ]

        }
,
        "outputType"
: "enrichInput1"
      }
,
      "id"
: "Merge节点",
      "name"
: "Merge节点",
      "type"
: "n8n-nodes-base.merge",
      "typeVersion"
: 1,
      "position"
: [600, 400]
    }

  ]
,
  "connections"
: {
    "客户信息"
: {
      "main"
: [
        [

          {

            "node"
: "Merge节点",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "订单信息"
: {
      "main"
: [
        [

          {

            "node"
: "Merge节点",
            "type"
: "main",
            "index"
: 1
          }

        ]

      ]

    }

  }

}

运行结果预期

执行这个工作流后,输出结果应该是:


    
    
    
  [
  {

    "customer_id"
: "1",
    "name"
: "张三",
    "order_id"
: "ORD001",
    "order_amount"
: "¥1000",
    "product"
: "笔记本"
  }
,
  {

    "customer_id"
: "2",
    "name"
: "李四",
    "order_id"
: "ORD002",
    "order_amount"
: "¥500",
    "product"
: "鼠标"
  }
,
  {

    "customer_id"
: "3",
    "name"
: "王五"
  }

]

说明


📚 其他实用场景

场景1:用户与权限数据合并


    
    
    
  Input 1 (用户): [{ id: 1, username: 'admin' }, { id: 2, username: 'user' }]
Input 2 (权限): [{ user_id: 1, role: '管理员' }]

Mode: Combine → Matching Fields → Keep Matches
Result: [{ id: 1, username: 'admin', user_id: 1, role: '管理员' }]

场景2:API响应分页数据汇总


    
    
    
  第1页数据: [item1, item2, item3]
第2页数据: [item4, item5, item6]

Mode: Append
Result: [item1, item2, item3, item4, item5, item6]

场景3:生成营销A/B测试变体


    
    
    
  文案集: [文案1, 文案2]
图片集: [图片1, 图片2, 图片3]

Mode: Combine → All Possible Combinations
Result: 6个组合 (2×3)

✅ 最佳实践建议

  1. 1. 命名清晰:给节点起有意义的名字,如"按用户ID合并"而不是"Merge1"
  2. 2. 验证数据:在Merge前,添加一个 Preview 步骤检查数据格式和字段名
  3. 3. 错误处理:如果Merge输出为空或数据不符预期,检查:
    • • 匹配字段是否存在于两个输入
    • • 字段值是否真的相等
    • • 是否启用了必要的高级选项
  4. 4. 性能优化:对于大数据量,考虑使用 SQL Query 模式或在数据库层面进行join
  5. 5. 复杂场景:如果需要多步骤的数据组合,可以使用多个Merge节点串联

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#