温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用自连接去重数据

发布时间:2026-09-04 22:08:53 来源:亿速云 阅读:109 作者:小樊 栏目:数据库

在 SQL 中,自连接(Self Join)去重通常用于没有唯一主键或需要按某些字段组合找出重复记录并保留其中一条的场景。下面用清晰示例说明。


一、什么是自连接去重

自连接就是同一张表自己和自己连接,通过条件判断哪些行是“重复”的,然后只保留需要的一条。


二、典型示例

示例表

users
+----+------+------+
| id | name | age  |
+----+------+------+
| 1  | Tom  | 20   |
| 2  | Tom  | 20   |
| 3  | Lucy | 22   |
| 4  | Lucy | 22   |
+----+------+------+

目标:
按 name + age 去重,只保留 id 最小的一条


三、使用自连接去重(保留最小 id)

SELECT u1.*
FROM users u1
LEFT JOIN users u2
  ON u1.name = u2.name
 AND u1.age = u2.age
 AND u1.id > u2.id
WHERE u2.id IS NULL;

原理说明

  • u1.id > u2.id:找“更老”的重复记录
  • u2.id IS NULL:说明没有比它更小的 id
  • 结果:每组重复数据中只保留 id 最小的一条

✅ 输出:

1 Tom 20
3 Lucy 22

四、删除重复数据(自连接 + DELETE)

DELETE u1
FROM users u1
JOIN users u2
  ON u1.name = u2.name
 AND u1.age = u2.age
 AND u1.id > u2.id;

作用:
删除重复行,只保留 id 最小的一条


五、常见去重场景对比

场景 是否适合自连接
完全重复行 ✅
部分字段重复 ✅
有主键 ✅(用 id 控制保留)
只想查询不删除 ✅

六、和 GROUP BY 的区别

  • GROUP BY:适合聚合
  • 自连接:适合“保留原行结构”的去重

如果你有具体表结构或业务规则(比如“保留最新时间”),我可以帮你写精准 SQL。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手