例如删除相同ID的数据,现在我有一种想法,就是用select distinct选出放在一个临时表里,把原表删了再插入.不过觉得这种方法比较麻烦,有没有其它办法呢?

解决方案 »

  1.   

    一种方法如下,但效率未必有你直接创建个临时表快。delete a from yourTable a left join (select id,min(pkey) as min_pkey from yourTable group by id) b
    on a.pkey=b.min_pkey where b.min_pkey is null
      

  2.   

    如果是整条记录完全一样的,貌似只能用临时表了如果有某一字段是不重复的,则可以保留相同ID的不重复字段PKEY最小的一条记录,其他的删除
    DELETE 
      TB
    WHERE 
      EXISTS(SELECT 1 FROM TB T WHERE T.ID=TB.ID AND T.PKEY<TB.PKEY)
      

  3.   

    在navicat for mysql 工具中,可以很方面的删除重复的记录。就在先建立一个完全一样的表,然后在可能重复的字段上设立主键,利用主键来限制重复的记录。把原来的表中的数据插入到新的表中,大致sql语句是:
    insert ignore into new_table select * from old_table;
      

  4.   

    提供一种方法:先建立一个新的临时表首先将原表区别重复的字段设置为主键然后将原表的内容运用 insert ignore 的方式将原表导入到新临时表删除原表 建立与原表相同的表并将新临时表导入到原表没有测试过效率具体实例:create  table t (
    num  int
    );insert into t values(5);
    insert into t values(5);
    insert into t values(5);select * from  t;--创建临时表
    create table tmp_t(
    num int primary key 
    );insert ignore into tmp_t select *from t;--删除原表
    drop table t;--建立原表并导入数据
    create table t(
    select * from  tmp_t
    );希望对你有用!
      

  5.   

    是一条记录还是KEY字段相同?
    前者:DISTINCTROW
    后者:用连接