我有一个mysql表,其中有很多重复的行,如上面的示例所示,我想删除重复的行并保留其中的每一个,我该怎么做?我应该使用哪个查询?我也想保持ID的递增顺序,例如1、2、3等。我不希望删除导致ID递增的顺序如1、10、15等。 ID?
这里是一种方式:
delete t1
from mytable t1
inner join mytable t2
on t1.id > t2.id
and t1.parametername = t2.parametername
and t1.parametertype = t2.parametertype
and t1.parameterclass = t2.parameterclass
-- more equality conditions that define the duplicates
这将删除联接的on
子句中定义的重复记录,同时保留具有最小id
的记录。
如果您想对ID进行重新编号,我建议您删除数据并重新插入。
create table temp_t as
select min(id) as min_id, parametername, parametertype, . . . -- list the columns
from t
group by parametername, parametertype;
truncate table t; -- back it up first!
insert into t (parameternae, parametertype, . . .)
select parametername, parametertype, . . .
from temp_t
order by min_id;
这假设id
正在自动递增。如果不是,则可以使用:
insert into t (id, parametername, parametertype, . . .)
select row_number() over (order by min_id), parametername, parametertype, . . .
from temp_t
order by min_id;