删除mySql表中的第二个重复记录

时间:2015-06-11 11:46:17

标签: mysql

我的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

在此示例中,Id(1,3,5),(2,7)包含重复项。我想删除3,5,7行

预期产出

id  |      Entry    |   Value
--------------------------------
1   |   AA15AA7515  |   11445588
2   |   AAFIRNNFIE  |   99586454
4   |   AA9894AF56  |   15985632
6   |   AA69481533  |   15454186

4 个答案:

答案 0 :(得分:6)

你有一个包含重复行的表 - 不知何故,没有创建一个唯一索引,并且一个错误已经在表中添加了重复记录。

需要通过添加UNIQUE约束来更改表。

您可以按如下方式使用此查询:

DELETE from table1
USING table1, table1 as vtable
WHERE (NOT table1.ID>vtable.ID)
AND (table1.logEntry=vtable.logEntry)

您应该运行此查询以确保表中不再出现重复条目​​:

ALTER TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2);

但如果表格为空,则可以执行此操作。

或者如果存在记录,请尝试添加IGNORE

ALTER IGNORE TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2);

注意:如果您使用服务器端脚本插入数据(似乎您使用php标记),那么也要使用表中存在记录的验证。

答案 1 :(得分:6)

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 );

这样可以正常工作。

点击此处:http://www.sqlfiddle.com/#!9/825e0/1

答案 2 :(得分:5)

尝试这个

<div class="logo">
    <p><a href="index.html"><img src="images/logo_sml.jpg"></a></p>
    <p>Newton Public School<br>
    Kanaka Nagar-Rt Nagar<br>
    Reach Out, Reach High, Reach Beyond</p>
</div>

答案 3 :(得分:2)

这在MySQL中有点痛苦。我会使用left join

来做到这一点
delete t
    from table t left join
         (select min(id) as minid
          from table t2
          group by entry
         ) tokeep
         on t.id = tokeep.minid
    where tokeep.minid is null;