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

如何过滤三表inner join后的重复行,实现Accounting与Provider数据对账

解决方案

你得到4条冗余记录的核心原因是:Accounting关联Helper后得到2条同toid1的记录,再和Provider中2条同toid1的记录做inner join时触发了笛卡尔积,同toid1下的2*2=4条全匹配,没有加金额匹配的关联条件。

方案1:关联时直接加金额匹配条件(最优,从源头避免冗余数据)

直接在关联Provider的步骤就加上金额相等的判断,不需要后续再去重。

  • SQL写法示例:
SELECT a.doc_nr, a.amount, h.toID, p.tID, p.DATE, p.tAmount
FROM Accounting a
INNER JOIN Helper h ON a.invoice = h.invoice
INNER JOIN Provider p ON h.toID = p.toID AND a.amount = p.tAmount;
  • Pandas写法示例:
import pandas as pd
# 先关联Accounting和Helper
acc_helper = pd.merge(Accounting, Helper, on='invoice', how='inner')
# 关联Provider时同时加toID和金额匹配条件
result = pd.merge(acc_helper, Provider, left_on=['toID', 'amount'], right_on=['toID', 'tAmount'], how='inner')

方案2:基于已有4条中间结果过滤

如果已经生成了4条全量join结果,直接筛选amount = tAmount的行即可,不需要按doc_nr去重,自然就能得到2条符合要求的记录,每条doc_nr对应唯一匹配的tID和金额。

三类差异数据筛选补充(你最初的需求)

如果要完成你提到的三类数据筛选,可基于上述关联逻辑扩展实现:

  • 仅在Accounting表存在、Provider表不存在的数据:用Accounting关联Helper后的结果左连Provider(加金额匹配条件),筛选p.toID为空的记录
  • 仅在Provider表存在、Accounting表不存在的数据:用Provider左连「Helper关联Accounting的结果」(加金额匹配条件),筛选a.doc_nr为空的记录
  • 两张表都存在但金额不匹配的数据:先按toID关联两边,筛选a.amount <> p.tAmount的记录即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:18:01