编写查询以从 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;
我有一个 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;