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

write a query to remove duplicate rows from MySQL table?

我有一个 mysql table 有很多重复行,如上例所示,我想删除重复行并保留其中一个,我该怎么做?我应该使用哪个查询?我还想保持我的 ID 递增排序,例如 1、2、3 等。我不希望删除导致我的 ID 被排序为 1、10、15 等。如何通过递增方式重新排序我的行身份证号?

这是一种方法:

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;