关于sql数据表中查找重复记录的技巧

最近遇到一个问题:就是公司的考勤记录总是会重复,考勤记录是我们的定时任务定时调用产生的,但是不知道怎么回事,定时任务总是会重复调用,产生了很多重复的记录,公司有300来人,没个人都重复的话,也就是有将近300条重复的记录,一条一条的来找,肯定不现实。
所以为了从根本上解决问题,就需要我在考勤记录表里面加上唯一性约束,根据员工ID和考勤日期来做唯一性约束,但是问题来了,在做唯一性约束之前,必须要确保在此约束之上没有重复的值,所以要找到之前的重复记录先删除,唯一性约束才有作用,分析到这里其实就是怎么写sql的问题了。

   在此之前,我只写过一个表里面一个记录重复的记录查询,
       select employee_id from table t1 group by employee_id having count(1)>1
       这样就可以查询到employee_id出现大于一次的记录,那么两条记录重复的,也就可以同理写出来了


   select * from table t1 where (t1.A,t1.B) in (select A,B from table group by A,B having count(*)>1)
   执行之后发现这样的sql效率还是很高的,不到1s的时间,从10W数量级的数据中找到了我想要的数据,所以说写出好的sql,执行效率还是可以节省很多的时间! 
   ![测试结果](https://img-blog.csdn.net/20150908202401205)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值