mysql删除重复记录并且只保留一条

mysql删除重复记录并且只保留一条

-- 创建表
create table employees(
eid int,
ename varchar(20)
)
-- 添加数据
insert into employees values
(1,'陈平安'),
(2,'陈平安'),
(3,'宁姚'),
(4,'宁姚')(5,'虎头白也'),
(6,'魔道正剧中'),
(7,'绣虎崔巉'),
(8,'春风齐静春')

1.查询表中名称重复的数据

SELECT ename from employees GROUP BY ename HAVING COUNT(1)>1

2.查询出重复数据的id

SELECT aa.eid from employees aa where aa.ename in
(SELECT a.ename from employees a GROUP BY a.ename HAVING COUNT(1)>1)

3.根据name分组查询出id 最小的

SELECT min(aa.eid) from employees aa where aa.ename in
(SELECT a.ename from employees a GROUP BY a.ename HAVING COUNT(1)>1) GROUP BY ename

4.使用not in 找出要删除的id,并存入临时表中

CREATE TABLE lshi(
SELECT aa.eid from employees aa where aa.ename in
(SELECT a.ename from employees a GROUP BY a.ename HAVING COUNT(1)>1) and aa.eid not in 
(
SELECT min(aa.eid) from employees aa where aa.ename in
(SELECT a.ename from employees a GROUP BY a.ename HAVING COUNT(1)>1) GROUP BY ename
))
)

5.关联临时表删除即可

DELETE from employees a where a.eid in(SELECT * from lshi)

 小菜一枚,有什么写的不妥的地方,欢迎大家指教!

 我会不定期的看评论,也会根据大家的指点来修改博客不妥的地方!

 各位读者有什么好的方法,或者想法    也欢迎各位大牛到评论区留言。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值