删除数据库表中的重复数据

来源:互联网 发布:路由器禁止mac地址 编辑:程序博客网 时间:2024/06/06 00:28

代码

    delete from tbl where (id) in(    select id from (    select id from tbl where (name,age) in         (        select name,age from tbl group by name,age  having count(*)>1        )        and id not in (        select min(id) from tbl group by name,age having count(*)>1        )    )tbl)

详解

  • 1
select name,age from tbl group by name,age  having count(*)>1

搜索名字和年龄相同的数据

  • 2
select min(id) from tbl group by name,age having count(*)>1

搜索出名字和年龄相同的数据中id最小的列

  • 3
select id from tbl where (name,age) in         (        select name,age from tbl group by name,age  having count(*)>1        )        and id not in (        select min(id) from tbl group by name,age having count(*)>1        )

将第一句sql和第二句sql合并 not in 表示排除,
产生一个新的所有符合标准的id所有值

  • 4
select id from (    select id from tbl where (name,age) in         (        select name,age from tbl group by name,age  having count(*)>1        )        and id not in (        select min(id) from tbl group by name,age having count(*)>1        )    )tbl

由于在mysql中,必须要在外部再包含一个sql 所以这个不能少

  • 5
delete from tbl where (id) in(    select id from (    select id from tbl where (name,age) in         (        select name,age from tbl group by name,age  having count(*)>1        )        and id not in (        select min(id) from tbl group by name,age having count(*)>1        )    )tbl)

最后 所有符合标准的id 全部删除即可

原创粉丝点击