左右连接如何去重重复的数据

发布时间:2026/7/31 4:18:17
左右连接如何去重重复的数据 在 SQL 中,左右连接(LEFT/RIGHT JOIN)产生重复数据,根本原因在于“一对多”或“多对多”的关联关系。即左表的一条记录,在右表中匹配到了多条记录。针对不同的业务诉求,去重策略也完全不同。这里为你总结 4 种最实用的去重方案,按推荐度排序:🥇 方案一:业务去重(窗口函数法)—— 最灵活、最推荐适用场景:你需要关联右表的数据,但只需要右表中匹配到的“最新”或“最旧”或“指定优先级”的一条记录(比如:查所有用户及其最近的一笔订单)。核心思想:先对右表进行排序去重(取rn=1),再连接,彻底杜绝数据膨胀。sqlSELECT 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 + 聚合函数)适用场景:你需要关联右表,但最终目的是展现右表某些字段的汇总值(如:总金额、最大金额、计数)。核心思想:先对右表按关联字段分组汇总,再用连接。sqlSELECT