多表关联:连接、追加、查找匹配

台账对系统账,找出两边对不上的记录。这一讲把数据合并里最绕的三个问题讲透:四种连接类型差在哪、匹配不上时该查什么、行数为什么会变多。

30 分钟预计用时
4 种连接类型
3 步排查匹配失败
开始之前

这一讲接着第 4 讲往下做。第 4 讲教的类型转换和字符串处理,在这一讲会变成硬需求 – 关联失败的原因大半出在 key 没洗干净。

数据合并的第一步:分清「连接」和「关联」

数据合并有两种完全不同的做法,对应两个名字接近的节点,这也是这套教程里最容易用错的一对。第 3 讲已经预告过,这里正式讲清楚。

演示会自动播放。鼠标移上去暂停,点任意按钮转为手动,点右上角可以全屏投影。

连接:上下摞行数相加,不看有没有对应关系。三份分公司台账拼成一份全国台账,用它。第 3 讲讲过。
关联:左右拼按 key 找对应,把两张表的字段并到一行。台账对系统账、订单配客户信息,用它。

一句话记:要更多行用连接,要更多列用关联。拿不准的时候,先问自己「结果应该有几行、几列」,答案立刻就出来了。

四种连接类型,区别只在一件事

关联节点的配置里最重要的就是连接类型。它决定的只有一件事:匹配不上的行,留还是不留。

类型留什么什么时候用
内连接只留两边都能对上的确定两边一定能对上时。做对账千万别用
左外连接左表全留,右表对不上就补空找「台账有、系统没有」的资产
右外连接右表全留,左表对不上就补空找「系统有、台账没有」的资产
全外连接两边的行一个不丢做对账就用它,三类差异一次出全

内连接是这一讲最危险的默认值。它会把匹配不上的行静悄悄丢掉,不报错、不警告、节点还是绿灯。用它做对账,等于把要找的差异全扔了 – 而你会以为「两边完全一致」。

对账的标准做法

用全外连接跑一次,得到一张包含全部差异的表,然后用第 2 讲的行过滤器分三次筛:

  • 系统数量为空 → 台账里有,系统里漏登记了
  • 台账数量为空 → 系统里有,台账上漏登记了
  • 两个都有但不相等 → 数量对不上,需要核实

这三类差异对应三种完全不同的处理动作,所以要分开筛、分开交。一张混在一起的差异表,接手的人不知道该干什么。

明明有,却一行都匹配不上

这是关联最高频的故障:两张表里都能看到 12000008,内连接跑出来却是 0 行。节点绿灯,控制台干净。

照这个顺序查,十分钟能定位

  • 类型不一致。一张表里编号是整数(标记 I),另一张是字符串(标记 S)。人眼看着一样,系统认为不是一个东西。用第 4 讲的类型转换统一成同一种。
  • 看不见的空格。系统导出的编号尾部常带一个空格,屏幕上完全看不出来。关联前对 key 做一次 strip,成本几乎为零。
  • 格式不统一。一边是 FA-12000008-SZ,一边是 12000008。用第 4 讲的字符串处理把 key 洗成同一种样子,再拿洗过的那一列做连接列。

建议养成的习惯:关联之前,先给两边的 key 都加一道去空格 + 统一类型。两个节点的事,能省掉后面大量的莫名其妙。

关联之后,行数怎么反而变多了

台账 3 行、领用记录 4 行,关联出来 6 行。这不是节点坏了,是关联的正常行为:结果行数 = 左边匹配上的行数 × 右边匹配上的行数。

一台设备被领用过三次,右表就有三行,左表那一行会被复制成三行。这在业务上是对的 – 一对多本来就该展开。真正危险的是你以为 key 唯一,其实不唯一:几万行的表一乘,能变成几百万行,内存直接吃满。

关联前:查一遍 key用分组聚合按 key 计数,看有没有大于 1 的。发现重复,要么先去重,要么承认这是一对多。
关联后:核一遍行数内连接结果应该小于等于两边行数。比两边都大 = key 有重复;等于 0 = 去查类型、空格、格式。

学完自检

  • 分得清连接(更多行)和关联(更多列),不会再用错
  • 知道内连接会静悄悄丢掉匹配不上的行,做对账用全外连接
  • 能用全外连接跑一次,再分三次筛出三类差异
  • 匹配不上时会按「类型 → 空格 → 格式」的顺序排查
  • 关联后会核行数,知道行数暴涨意味着 key 有重复

拿你手上那两张对不上的表试一次

全外连接加三次行过滤,是对账最省事的一套组合。跑一遍你就知道差异到底在哪。

iModel 专属客服
网页直接对话,无需微信
4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码