我有一个有5个字段的MySql数据库。有两个关键字段,Cfield1和CField2。如果对于任何两个条目,Cfield1的值都是相同的,并且Cfield2的值也是相同的,那么我想删除这两个条目中的一个--不管是哪一个。
如果有三个是相同的,我希望只保留一个,并删除其余的。
我假设要做的第一件事是对Cfield1上的数据库进行排序,然后是Cfield2,但我不确定其余的编码应该是什么。
发布于 2018-08-19 11:27:05
假设您有另一个列--比如col3 --可以区分重复的行。然后您可以执行以下操作:
delete t
from t t join
(select cfield1, cfield2, min(col3) as min_col3
from t
group by cfield1, cfield2
) tt
using (cfield1, cfield2)
where t.col3 > tt.min_col3;如果您没有这样的列,那么我建议您创建一个新表。下面的代码使用了一个几乎完全不鼓励使用的MySQL特性,但它应该能做你想要的事情:
create table temp_t as
select t.*
from t
group by col1, col2;
truncate table t; -- be very careful here, copy the data somewhere else first!
insert into t
select *
from temp_t;发布于 2018-08-19 14:08:56
必须同时使用count (*)和group by:
select count (*),DuplicateField from table
group by DuplicateField
having count (*)>1因此,您将获得记录。或者,如果你想删除,我可以用我的例子告诉你:
select
'RepetedRows',
SA.Saleref,
MIN(CAST(SA.SaleAdditionID as varchar(100)) ),
'DELETE sms.tblsaleadditions WHERE SaleAdditionID = ''' + MIN(CAST(SA.SaleAdditionID as varchar(100)) ) + ''''
--select *
from
sms.tblsaleadditions SA
inner join (
select
saleref,
additionref,
count(*) N,
SUM(AdditionAmount) nn
from
sms.tblsaleadditions
group by
saleref,
additionref
having count(*) > 1
) V ON SA.saleref = V.Saleref and SA.additionref = V.additionref
group by
SA.Saleref现在,您可以复制所有delete语句并运行它们。
发布于 2018-08-21 00:30:35
这在MySQL查询中是什么?我们有这个要求,但是现有的数据库是MySQL。
https://stackoverflow.com/questions/51914166
复制相似问题