查找并删除后面的重复记录

时间:2016-11-14 06:19:35

标签: php mysql sql duplicates

我有一张约有0.5到100万条记录的表格。该表具有varchar字段的重复记录。

这样的东西
ID int(11)
TITLE varchar(100)

有许多记录具有重复的TITLE值。

我需要删除重复的记录。第一步是找到它们。我想有两种方法:

  1. 使用GROUP BY TITLE HAVING COUNT(*) > 1

  2. 使用SELECT ID, TITLE FROM MY_TABLE逐个记录,然后为每条记录使用SELECT ID FROM MY_TABLE WHERE TITLE='".$row['TITLE']." AND ID <> '".$row['ID']."'

  3. 问题是哪种方法有效?

    还是有另一种更有效的方法吗?

    我使用php作为基本语言。

2 个答案:

答案 0 :(得分:6)

要删除所有重复记录(具有相同标题),您可以使用此查询:

DELETE B
FROM your_table A 
INNER JOIN your_table B ON A.TITLE = B.TITLE AND A.ID < B.ID.

此查询将删除所有后面的重复记录,同时保留第一个记录。

为了在删除所有以前的重复记录时保持最新状态:

DELETE A
FROM your_table A 
INNER JOIN your_table B ON A.TITLE = B.TITLE AND A.ID < B.ID.

修改

如果要在执行删除操作之前查看将删除哪些(重复)记录,请运行以下查询:

SELECT B.*
FROM your_table A 
INNER JOIN your_table B ON A.TITLE = B.TITLE AND A.ID < B.ID.
  

这假设所有新ID都将大于之前的ID。一个   非常安全的假设,但谨慎是有道理的

感谢@xQbert的加入。

答案 1 :(得分:0)

使用以下sql

DELETE FROM MY_TABLE WHERE ID NOT IN (SELECT MIN(x.ID) FROM MY_TABLE x GROUP BY x.TITLE);