1、查出重复的type

SELECT type FROM table GROUP BY type HAVING count(type) > 1;

2、查出重复的type数据中最小的id

SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1;

3、查出重复的type数据中非最小的id(需要删除的)

SELECT id FROM table WHERE type in(
    SELECT type FROM table GROUP BY type HAVING count(type) > 1)
    AND id  not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1);

4、在MySQL中是不能删除查询出来的记录,而是要通过一张临时表来解决

SELECT id from (
    SELECT id FROM table WHERE type in(
        SELECT type FROM table GROUP BY type HAVING count(type) > 1)
        AND id  not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1)
) as t;

5、删除type重复的数据(只保留一条,保留最小id的)

DELETE FROM table WHERE id IN (
    SELECT id from (
        SELECT id FROM table WHERE type in(
            SELECT type FROM table GROUP BY type HAVING count(type) > 1)
            AND id  not IN(SELECT min(id) FROM table GROUP BY type HAVING count(type) > 1)
    ) as t
);

本文作者:
文章标签:数据库MySQL
文章标题:MySQL 删除重复的记录并保留其一
本文地址:https://www.ducky.vip/archives/35.html
版权说明:若无注明,本文皆 iDuckie's Blog 原创,转载请保留文章出处。
最后修改:2024 年 03 月 10 日
如果觉得我的文章对你有用,请随意赞赏