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

多表关联出现重复记录,其他列值不符问题求助

关联三张表出现重复记录及日期值不符问题

我尝试关联3张表,却出现了重复记录,其中一个日期列存在值不符的情况。以下是各表的示例内容:

表A

key1key2quant
123zxcabc1231
456asddef4562

表B

key1key2order_date
123zxcabc12320230101
456asddef45620230101

表C

key1key2delivery_date
123zxcabc12320230201
456asddef45620230202

当前输出

key1key2quantorder_datedelivery_date
123zxcabc12312023010120230201
456asddef45622023010120230202
123zxcabc12322023010120230202
456asddef45612023010120230201

当前使用SQL

SELECT DISTINCT
      a.key1,
      a.key2,
      a.quant,
      b.order_date,
      c.delivery_date
FROM tableA a
INNER JOIN tableB b ON a.key1 = b.key1 AND a.key2 = b.key2
INNER JOIN tableC c ON a.key1 = c.key1 AND a.key2 = c.key2

理想输出应为2行,我尝试移除delivery_date列后结果为2行。请问是否需要为关联添加额外条件?注:最后2行是错误数据。


解决方案

出现重复记录的核心原因是关联后产生了笛卡尔积,虽然你提供的示例表中key1+key2是唯一组合,但实际数据中大概率存在某个表内同一key1+key2对应多条记录的情况(比如表C中同一键组合对应多个delivery_date,或表A中同一键组合对应多个quant值),导致关联时匹配出多余的结果。

你可以通过以下方式解决:

1. 用聚合函数提取唯一值

如果业务上key1+key2应该对应唯一的日期和数量,可通过聚合函数(如MAX/MIN)提取唯一值,配合分组去重:

SELECT 
      a.key1,
      a.key2,
      a.quant,
      MAX(b.order_date) AS order_date,
      MAX(c.delivery_date) AS delivery_date
FROM tableA a
INNER JOIN tableB b ON a.key1 = b.key1 AND a.key2 = b.key2
INNER JOIN tableC c ON a.key1 = c.key1 AND a.key2 = c.key2
GROUP BY a.key1, a.key2, a.quant

2. 先对表C做去重处理

既然移除delivery_date后结果正常,说明问题出在表C的关联上,可先对表C的键组合和日期做去重,再执行关联:

SELECT DISTINCT
      a.key1,
      a.key2,
      a.quant,
      b.order_date,
      c.delivery_date
FROM tableA a
INNER JOIN tableB b ON a.key1 = b.key1 AND a.key2 = b.key2
INNER JOIN (
    SELECT DISTINCT key1, key2, delivery_date 
    FROM tableC
) c ON a.key1 = c.key1 AND a.key2 = c.key2

3. 清理重复数据(根源解决)

如果业务上key1+key2是唯一标识,需先清理三张表中的重复记录,删除同一键组合下的多余条目,再执行关联查询,从根源避免重复问题。


内容的提问来源于stack exchange,提问作者Nathanael Tom Aterado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:34:59