mysql删除重复数据只保留一条,代码如下:

DELETE FROM `article` WHERE `article_id` IN (
    SELECT `c`.`id` FROM (
        SELECT MIN(`article_id`) AS `id` FROM `article` AS `a` WHERE a.article_id IN (
            SELECT `article_id` FROM `article` AS `b` GROUP BY `title` HAVING COUNT(*) > 1
        ) GROUP BY `title`
    ) `c`
);


GROUP BY 可以多个字段,用英文逗号分开,如:GROUP BY `title`,`user_id`。
MIN(`article_id`) 为保留最大(最新)的记录,MAX(`article_id`) 为保留最小(最早)的记录。

这个sql执行一次只删除一个重复数据,如同一条数据重复了三次(相同title的),需执行两次才可以删除完成。如下要执行三次:

id   title
1    aaa
2    aaa
3    aaa
4    bbb
5    bbb
6    ccc
7    ccc
8    ddd
9    ddd