一种方法如下,但效率未必有你直接创建个临时表快。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
如果是整条记录完全一样的,貌似只能用临时表了如果有某一字段是不重复的,则可以保留相同ID的不重复字段PKEY最小的一条记录,其他的删除 DELETE TB WHERE EXISTS(SELECT 1 FROM TB T WHERE T.ID=TB.ID AND T.PKEY<TB.PKEY)
在navicat for mysql 工具中,可以很方面的删除重复的记录。就在先建立一个完全一样的表,然后在可能重复的字段上设立主键,利用主键来限制重复的记录。把原来的表中的数据插入到新的表中,大致sql语句是: insert ignore into new_table select * from old_table;
提供一种方法:先建立一个新的临时表首先将原表区别重复的字段设置为主键然后将原表的内容运用 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 );希望对你有用!
on a.pkey=b.min_pkey where b.min_pkey is null
DELETE
TB
WHERE
EXISTS(SELECT 1 FROM TB T WHERE T.ID=TB.ID AND T.PKEY<TB.PKEY)
insert ignore into new_table select * from old_table;
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
);希望对你有用!
前者:DISTINCTROW
后者:用连接