欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析

程序员文章站 2022-03-07 09:34:43
...

数据库中有重复数据时,用到哪些sql语句?

这里有若干数据,并掺杂了重复数据
Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析

1. 查看过滤重复后的数据

思路, group by 分组可以对多个列进行分组, 分组后可以过滤掉重复的数据

sql语句:

SELECT id,`name`,age,count(1)
    FROM test GROUP BY `name`,age

Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析

2. 查看重复的数据

刚刚的语句已经把每个组对应的count数查询出来了,那么count>1的自然是重复的数据

SELECT id,`name`,age,count(1) as c
    FROM test GROUP BY `name`,age having c > 1

Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析

3. 删除重复的数据留下一条

思路: 刚刚已经把重复的数据查询出来了,包括id, 那么查询出每个重复组中的唯一一个id,也就是x,就可以delete … id not in (x)

子语句1:

SELECT MIN(id) FROM test
            GROUP BY name,age 

查询出来的id就是我们需要留下的不重复的数据的id
Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析

按理来说只要:
delete from test where id not in 子语句1

DELETE FROM test
    WHERE id NOT IN (
        SELECT MIN(id) FROM test
            GROUP BY name,age 
    )

但是报错了
Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析
因为在mysql中,不能在一条Sql语句中,即查询这些数据,同时修改这些数据

解决方法:select的结果再通过一个中间表temp进行select多一次,就可以避免这个错误

DELETE FROM test
    WHERE id NOT IN (
        SELECT temp.min_id FROM (
            SELECT MIN(id) min_id FROM test
                GROUP BY name,age
            )AS temp
    }

删除成功:
Mysql数据库中查询重复数据和去重数据 , 删除重复数据的sql及分析