编写查询以从MySQL表中删除重复的行?

问题描述 投票:0回答:2

enter image description here

我有一个mysql表,其中有很多重复的行,如上面的示例所示,我想删除重复的行并保留其中的每一个,我该怎么做?我应该使用哪个查询?我也想保持ID的递增顺序,例如1、2、3等。我不希望删除导致ID递增的顺序如1、10、15等。 ID?

mysql sql duplicates
2个回答
0
投票

这里是一种方式:

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的记录。


0
投票

如果您想对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;
© www.soinside.com 2019 - 2024. All rights reserved.