sql删除多个字段重复数据有主键和没主键解决方法(mysql)

table user
     name age nub
     张三    12  23
     张三    12  23
     张三    12  23
     李四    13  21
     李四    13  21
     王五    11  25sql

查询重复记录(一条)
sql:select * from user group by name,age,nub having count(*)>1;
    (如需统计条数请使用conut)table

set:
     name age nub
     张三   12  23
     李四   13  21select

查询重复记录(全部)sql语句

sql:select * from user  a where (a.name,a.age,a.nub)  in (select *  from user group by name,age,nub having count(*)>1);统计

set
     name age nub
     张三   12   23
     张三   12  23
     张三   12  23
     李四   13  21
     李四   13  21数据

删除重复记录保留一条
 步骤:
     1.将查询的数据插入一个新的表中;
     2.删除原来的表的数据
     3.将新表的数据再插入原表中
     4,删除新表查询

 sql:
     1. create table new_table (select * from user group by name,age,nub having count(*)>1);
 
     2.delete from user  a where (a.name,a.age,a.nub)  in
       (select * from
       (select *  from user group by name,age,nub having count(*)>1) as b );tab

       在这里使用了两次select 由于:vi

       delete from user  a where (a.name,a.age,a.nub)  in
       (select *  from user group by name,age,nub having count(*)>1);会出现错误    
 co

       不能对同一表子查询后进行插入或者删除 要在子查询再嵌套一个查询 让对该表查询成为孙查询;
 
     3.insert into user (select name,age,nub from new_table);
 
      注意:在插入数据的时候查询表获得字段的顺序要与原表相同否者会出现数据错误;
      若是原表数据顺序与新表相同能够用这条语句insert into user (select * from new_table);

     4.drop table new_table;


到此完成操做 最后的数据:


     table user

          name age nub
          张三   12   23
          李四   13   21
          王五   11   25


若是原表中含有主键的话更好操做
 不用四条sql语句了 直接执行删除操做
 delete from user  a where (a.name,a.age,a.nub)  in
   (select name,age,nub from
   (select *  from user group by name,age,nub having count(*)>1) as b  )
   and id not in(select min(id) from
   (select *  from user group by name,age,nub having count(*)>1) as c);

 

注意事项: 在使用 (name,age,address) in (select *)的时候 * 只能是三列 若是有更多列则不能使用 *,要明确指出是哪些列;

相关文章
相关标签/搜索