只保留某个字段内容一样的行的其中一行。比如表如下f1        f2          f3 【列名】
v1        v2          v3
v1        v9          v10
v2        v1          v3
结果
f1        f2          f3  【列名】
v1        v2          v3
v2        v1          v3f1字段内容如果相同只保留一条,删除其他的。
上例中,v1相同所以只保留任意一条记录,另外一条删除
由于db有1千万数据所以希望有一个高效的语句,希望大家帮忙啊。

解决方案 »

  1.   

    create table xxx as 
    select * from 表如下 group by f1新建一个表,然后删除旧表,再把XXX改为原表名。
      

  2.   

    delete from t where id not in (select distince id from t)
      

  3.   

    表中没有唯一标识的字段,增加自增字段
    delete from TT A where NOT EXISTS(SELECT 1 FROM TT WHERE F1=A.F1 AND A.ID>ID)
      

  4.   

    delete A from TT A INNER JOIN
    (SELECT F1,MIN(ID) AS MI FROM TT GROUP BY F1) B ON A.F1=F1 AND A.ID=B.MI
      

  5.   

      DELETE A FROM AAB A LEFT JOIN AAB B ON A.F1=B.F1 AND A.ID>B.ID WHERE B.ID IS NOT NULL
    OR
    DELETE A FROM AAB A INNER JOIN AAB B ON A.F1=B.F1 AND A.ID>B.ID;
      

  6.   

    测试通过 ,还可以用HAVING COUNT(*) >=2这种方法
      

  7.   

    1。创建表结构相同的临时表2。将去掉重复记录的子查询添加到临时表中3。删除原来的表4。重命名临时表到原来的表1、create table client_old like client2、insert into client_old 
    select distinct *from client  group by mac3、drop table client 4、rename table client_old to client
      

  8.   

    不确定下面这个数据量大时快不快,但我常用
    alter ignore table t add unique index f_1(f1);
    alter table t drop index f_1;
      

  9.   

    delete from t where id not in (select distince id from t)