mysql删除重复用户_MYSQL删除重复数据

delete from co_jobinformation c

where c.name in (select cc.name from co_jobinformation cc group by  cc.name   having count(cc.name) > 1)

and rowid not in (select min(rowid) from co_jobinformation e group by e.name having count(e.name )>1)

之前在oracle数据库中能删除重复数据并且能保留一条唯一数据,但是相同的MySQL中就不行,

mysql有个特性,对于表进行修改,删除操作,子查询不能和外层的查询的表一样,所以在加个select就可以了

DELETE tt.*

FROM t_user tt  --这是操作的表

WHERE tt.username --这是用户名重复的数据

IN(

SELECT cc.username

FROM (

SELECT b.*

FROM t_user b

) cc

GROUP BY cc.username

HAVING COUNT(cc.username) >1

)

AND tt.id  --这里是保留id最小的一条,应该比较容易看懂.

NOT IN(

SELECT MIN(e.id)

FROM(

SELECT ee.*

FROM t_user ee) e

GROUP BY e.username

HAVING COUNT(e.username )>1)

)

)

刚才网上找到一种写法

select a.* from jc_informationpublic a

where a.id !=

(

select max(b.id) from jc_informationpublic b

where a.unit_name = b.unit_name

)

AND id NOT IN (SELECT min(id) FROM jc_informationpublic c GROUP BY c.unit_name HAVING COUNT(c.unit_name)>1)

也能实现效果,但是据说效率不高.

我写的有点丑,但是我想要的结果实现了,就是把上面子查询里面的表换成select查询,还请高手留下优质SQL,感激不尽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值