数据库关联表查询出重复数据的原因分析与解决

最近工作中遇到用关联的数据库查询出两条重复的数据,导致统计数据时有偏差,所以就想着写篇文章记录一下,并供遇到同样问题的小伙伴参考
示例sql:

复制代码
select a.* from corp_info a left join corp_org b on a.org_no =b.org_no and a.stat=b.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.stat=b.stat 
where a.stat='1' group by a.org_no having cnt>1;

查询出有cnt>1的记录,就是重复数据的源头.

解决方案

1:先对右表去重再关联

先把右表分组/去重,再left join

SELECT 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.status=1`

补充:

INNER JOIN 也会重复:同样是右表多条匹配导致

RIGHT JOIN 重复:左表一对多匹配右表单条

FULL JOIN 两边都可能出现重复

相关推荐
cc57250265314 分钟前
2027校招准备:数据科学与大数据技术专业转产品数据运营,PRD与SQL怎么安排?
大数据·sql·墨刀
l1t1 小时前
DeepSeek总结的 DuckDB 2.0 中更简洁的变量语法
数据库·sql
l1t4 小时前
DeepSeek总结的在 NVIDIA Vera 上对 DuckDB v2.0-dev 进行基准测试
服务器·数据库·sql
张张123y4 小时前
# 后端第八课:数据库入门(给 FastAPI 接口加上“记忆“,存下问答历史)
数据库·sql·mysql·oracle·fastapi·sqllite
刘胡子大叔7 小时前
旧 SQL 在新 PG 上能不能跑
数据库·sql
软件交付观察室8 小时前
数据大屏总数与明细为什么对不上?2026项目开发排查指南
软件测试·数据库·sql·sqlite·数据可视化
the局外人9 小时前
学会 SQLAlchemy 搭建 Python 与 MySQL 之间的数据访问桥梁 🚀
后端·python·sql
冰暮流星9 小时前
mysql索引失效的情形
数据库·笔记·sql·mysql
Navicat中国10 小时前
SQL 编辑器生产力:重构与实时错误检测
数据库·sql·重构·编辑器·navicat
2601_9627809110 小时前
2027风险管理岗准备路线:数学与应用数学专业如何补齐金融、SQL与Python
python·sql·金融