我有一个带有重复条目的 mySQL 表(在某些情况下可能有多个重复项)。我有一个名为 id 的列,它可能包含重复的 id 和一个称为唯一 id 的列,顾名思义,它包含唯一的 id。使用以下 SQL 语句,我可以选择重复的行
SELECT id,
COUNT(id) AS NumOccurrences
FROM `TABLE 3`
GROUP BY id
HAVING ( COUNT(id) > 1 )
但是我如何删除它们(除其中一个之外的所有)?
我有一个带有重复条目的 mySQL 表(在某些情况下可能有多个重复项)。我有一个名为 id 的列,它可能包含重复的 id 和一个称为唯一 id 的列,顾名思义,它包含唯一的 id。使用以下 SQL 语句,我可以选择重复的行
SELECT id,
COUNT(id) AS NumOccurrences
FROM `TABLE 3`
GROUP BY id
HAVING ( COUNT(id) > 1 )
但是我如何删除它们(除其中一个之外的所有)?
DELETE t1 FROM test t1, test t2 WHERE t1.unique_id > t2.unique_id AND t1.id = t2.id;
您应该UNIQUE INDEX
在唯一 id 字段上添加一个。这将防止更多重复项稍后潜入。
ALTER IGNORE `TABLE 3` ADD UNIQUE INDEX (`unique_id`);
IGNORE 位将仅保留值为“unique_id”的第一行。您还应该避免在列名或表名中使用空格。它使编写 SQL 容易出错,因为您必须在名称周围使用刻度。