我有一张约有0.5到100万条记录的表格。该表具有varchar字段的重复记录。
像
这样的东西ID int(11)
TITLE varchar(100)
有许多记录具有重复的TITLE值。
我需要删除重复的记录。第一步是找到它们。我想有两种方法:
使用GROUP BY TITLE HAVING COUNT(*) > 1
使用SELECT ID, TITLE FROM MY_TABLE
逐个记录,然后为每条记录使用SELECT ID FROM MY_TABLE WHERE TITLE='".$row['TITLE']." AND ID <> '".$row['ID']."'
问题是哪种方法有效?
还是有另一种更有效的方法吗?
我使用php作为基本语言。
答案 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);