SQL重复记录查询

本文介绍了如何在SQL中查询和删除重复记录,提供多种基于单字段和多字段的查询及删除方法,如使用`DISTINCT`关键字、子查询配合`HAVING`和`GROUP BY`来找出并处理重复数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在LeetCode上面看到一道题,题目不难,而且考的点也很基础,但是感觉可以归纳出一些内容来,所以就自己归纳了一下。题目如下

题目并不难,我写的sql如下:

select distinct p1.Email from Person as p1 where p1.Email in (select p2.Email from Person as p2 group by p2.Email having count(p2.Email)>1)

其实从sql来看我就是把这条sql分成了两部分,in里面的部分是取出Email里面count>1的数据,然后去取p1里面合适的数据即可,但是p2里面取出来的会有很多重复的数据,所以我在p1的select 部分加了distinct来去重。一般来说应用到具体业务是不会单独取个Name的值的,所以上方的写法仅仅只是为了完成这道题。下面整理集中SQL的重复记录的查询方法,以及删除多余数据的方法。

1.查找表中的多余重复记录,用单字段来判断

select * from Person as p1 where p1.Email in (select Email from Person as p2 group by p2.Email having count(p2.Email)>1)

2.删除表的多余重复记录,保留id最小的记录,用单字段进行判断

delete from Person where Email in (select p2.Email from Person as p2 group by p2.Email having count(p2.Email)>1) and id not in (select min(id) from Person as p3 group by p3.Email having count(p3.Email)>1)

3.查询表中的多余重复记录,用多字段进行判断

select * from Person as p1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值