左右连接如何去重重复的数据
2026/7/31 4:18:11 网站建设 项目流程

在 SQL 中,左右连接(LEFT/RIGHT JOIN)产生重复数据,根本原因在于 “一对多”或“多对多”的关联关系。即左表的一条记录,在右表中匹配到了多条记录。

针对不同的业务诉求,去重策略也完全不同。这里为你总结 4 种最实用的去重方案,按推荐度排序:


🥇 方案一:业务去重(窗口函数法)—— 最灵活、最推荐

适用场景:你需要关联右表的数据,但只需要右表中匹配到的“最新”或“最旧”或“指定优先级”的一条记录(比如:查所有用户及其最近的一笔订单)。

核心思想:先对右表进行排序去重(取 rn=1),再连接,彻底杜绝数据膨胀。

sql

SELECT a.*, b.order_id, b.amount FROM users a LEFT JOIN ( SELECT user_id, order_id, amount, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY create_time DESC) AS rn FROM orders ) b ON a.id = b.user_id AND b.rn = 1;

优点:不仅去重,还完全控制了取哪条数据,性能最优(仅取一条)。


🥈 方案二:聚合去重(GROUP BY + 聚合函数)

适用场景:你需要关联右表,但最终目的是展现右表某些字段的汇总值(如:总金额、最大金额、计数)。

核心思想:先对右表按关联字段分组汇总,再用连接。

sql

SELECT

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询