我的MySQL表中有2,00,00行数据的集合.现在我想删除表中的第二个重复记录.(即),不应删除重复值的第一条记录.仅删除表格中的第二个重复记录.
例
id | logEntry | logValue
--------------------------------
1 | AA15AA7515 | 11445588
2 | AAFIRNNFIE | 99586454
3 | AA15AA7515 | 14589313
4 | AA9894AF56 | 15985632
5 | AA15AA7515 | 16124246
6 | AA69481533 | 15454186
7 | AAFIRNNFIE | 12788549
Run Code Online (Sandbox Code Playgroud)
在此示例中,Id(1,3,5),(2,7)包含重复项.我想删除3,5,7行
预期产出
id | Entry | Value
--------------------------------
1 | AA15AA7515 | 11445588
2 | AAFIRNNFIE | 99586454
4 | AA9894AF56 | 15985632
6 | AA69481533 | 15454186
Run Code Online (Sandbox Code Playgroud)
您有一个包含重复行的表 - 不知何故,没有创建唯一索引,并且错误已将重复记录添加到您的表中.
需要通过添加UNIQUE约束来更改表.
您可以按如下方式使用此查询:
DELETE from table1
USING table1, table1 as vtable
WHERE (NOT table1.ID>vtable.ID)
AND (table1.logEntry=vtable.logEntry)
Run Code Online (Sandbox Code Playgroud)
您应该运行此查询以确保表中不再出现重复条目:
ALTER TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2);
Run Code Online (Sandbox Code Playgroud)
但是如果表是空的,你可以这样做.
或者如果存在记录,请尝试添加 IGNORE
ALTER IGNORE TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2);
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用服务器端脚本插入数据(似乎您使用php标记),那么也使用表中的存在记录验证.
delete from temp1 where id in ( select x.id from (select a.id from temp1 a,
temp1 b where a.id<>b.id and a.logentry=b.logentry and a.id>b.id group by
a.id) x );
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作.
点击这里:http://www.sqlfiddle.com/#!9/825e0/1
试试这个
Delete From table_name
where id not in( select min(id) from table_name
group by Entry )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1255 次 |
最近记录: |