最近工作中遇到用关联的数据库查询出两条重复的数据导致统计数据时有偏差所以就想着写篇文章记录一下并供遇到同样问题的小伙伴参考示例sql:select a.* from corp_info a left join corp_org b on a.org_no b.org_no and a.statb.stat where a.stat‘1’核心原因左表 A 一条数据右表 B 匹配出多条记录LEFT JOIN 会把左表这条数据复制多份对应右表多条数据最终出现重复行。其他原因表本身存在重复的脏数据关联条件写漏字段导致匹配范围放大快速排查:select a.org_no,count(b.org_no) cnt from corp_info a left join corp_org b on a.org_no b.org_no and a.statb.statwhere a.stat‘1’ group by a.org_no having cnt1;查询出有cnt1的记录就是重复数据的源头.解决方案1先对右表去重再关联先把右表分组/去重再left joinSELECT a., b.FROM table_a a LEFT JOIN ( SELECT DISTINCT b.id FROM table_b ) b ON a.id b.id;2使用 DISTINCT 全局去重简单数据量大性能会变差SELECT DISTINCT a., b.FROM table_a a LEFT JOIN table_b b ON a.id b.a_id;3修正关联条件检查ON后面条件是否缺少限定字段比如只写了用户id没加状态、时间筛选导致匹配过多数据错误ON a.uid b.uid优化ON a.uid b.uid AND b.status1补充INNER JOIN 也会重复同样是右表多条匹配导致RIGHT JOIN 重复左表一对多匹配右表单条