如何从MySQL表中删除所有重复数据?
例如,具有以下数据:
SELECT * FROM names;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
我会使用,SELECT DISTINCT name FROM names;
如果它是一个SELECT
查询。
我该怎么做DELETE
才能只删除重复项并仅保留每个记录一个?
编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。
注意:您 需要 首先在表的 测试副本 上执行此操作!
完成此操作后,我发现,除非也包含AND n1.id <> n2.id
,否则它将删除表中的每一行。
如果要使行的id
值保持最低,请执行以下操作:
DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
如果要保留最高id
值的行:
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
我在MySQL 5.1中使用了这种方法
不确定其他版本。
更新:由于使用Google搜索来删除重复项的人员最终会出现在此处
尽管OP的问题是关于DELETE
,但请注意使用INSERT
和DISTINCT
会更快。对于具有800万行的数据库,以下查询花费了13分钟,而使用DELETE
,则花费了2个多小时,但尚未完成。
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;
问题内容: 这个问题已经在这里有了答案 : 在MySQL中删除重复的行 (25个答案) 3个月前关闭。 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除
问题内容: 我有三列的表:,和 有重复的字段。我想删除所有具有相同的行为别人 ,除了 对最近更新的一个。 因此,如果表包含这些行: 然后,我只想保留这些行: 您如何在SQL中做到这一点?我想象会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有 行删除呢? 问题答案: 您可以使用左联接来执行此操作: 这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日
问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 选择MySQL中除一列以外的所有列? 我想知道是否有一种方法可以从数据库的表中选择除一个字段以外的所有其他字段。 我知道我可以在选择查询中描述字段名称。 例如: 但是我的问题是,有没有办法以一种简单的方式做到这一点呢? 我正在使用MySQL和Zend框架。 问题答案: 你可以很容易做到 假设您的字段是id = 5 然后 如果你的
问题内容: 我有一个注释表,其结构如下: 我有很多重复的评论,名字和电子邮件都一样。我需要删除它们,有人可以建议我如何使用一个查询来实现此目标吗? 谢谢 问题答案:
问题内容: 我正在尝试使用select语句从某个MySQL表中获取除一个以外的所有列。有没有简单的方法可以做到这一点? 编辑:此表中有53列(不是我的设计) 问题答案: 实际上有一种方法,您当然需要具有执行此操作的权限… 更换
我有一个数据集,如下所示: 但不管用。