删除 MySQL 中的重复行

新手上路,请多包涵

我有一个包含以下字段的表:

 id (Unique)
url (Unique)
title
company
site_id

现在,我需要删除具有相同 title, company and site_id 的行。一种方法是使用以下 SQL 和脚本( PHP ):

 SELECT title, site_id, location, id, count( * )
FROM jobs
GROUP BY site_id, company, title, location
HAVING count( * ) >1

运行此查询后,我可以使用服务器端脚本删除重复项。

但是,我想知道这是否只能使用 SQL 查询来完成。

原文由 Chetan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
2 个回答

一个非常简单的方法是在 3 列上添加一个 UNIQUE 索引。当您编写 ALTER 语句时,请包含 IGNORE 关键字。像这样:

 ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);

这将删除所有重复的行。作为一个额外的好处,未来 INSERTs 是重复的将出错。与往常一样,您可能希望在运行此类操作之前进行备份……

原文由 Chris Henry 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您尝试删除其中一个重复项并保留另一个,这是完美的。请注意,如果没有子查询,您将收到 #1093 错误。

 DELETE FROM table_name
WHERE id IN (
    SELECT * FROM (SELECT n.id FROM table_name n
    WHERE n.column2 != "value"
    GROUP BY n.column HAVING COUNT(n.column ) > 1) x
)

原文由 Sammy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏