SQL重复记录查询

今天在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值