标签:
之前在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查询,还请高手留下优质SQL,感激不尽!
标签:
原文地址:http://www.cnblogs.com/zxgwork/p/4684306.html