【问题标题】:How do I delete duplicate rows in MySQL? [duplicate]如何删除 MySQL 中的重复行? [复制]
【发布时间】:2012-07-27 00:24:12
【问题描述】:

我在 MySQL 数据库中有一些行是重复的,除了它们的 ID 号。

例如,我可能有两行:

ID   | wordlist | category
845  | abashed  | confused
1800 | abashed  | confused

我想找到所有的,只留下一个。

我可以使用 SQL 来执行此操作,还是需要编写某种程序?

为了澄清,我只想在单词列表部分获得重复项。

【问题讨论】:

  • 如果它们在另一个表中被引用,这会使您的数据库不正确,因为您不知道特定重复单词引用了哪个 ID

标签: mysql


【解决方案1】:
ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx_wordlist (wordlist );

【讨论】:

  • "键 'index_wordlist' 的重复条目 'agreeable'"
【解决方案2】:

您可以通过DELETE 语句中的外连接来做到这一点:

DELETE a FROM tbl a
LEFT JOIN
(
    SELECT MIN(id) AS id
    FROM tbl
    GROUP BY wordlist
) b ON a.id = b.id
WHERE a.category = '<category here>' AND b.id IS NULL

这将仅消除特定类别的重复项(在wordlist 列中),并保留id 最低的类别。

【讨论】:

  • 我不想删除类别部分中的重复项。只是单词表部分。
  • @AndrewAlexander,好的,取出GROUP BY 中的category 字段。试试看。
  • 哦,废话,我删除了超出我想要的额外信息。只想删除给定类别中重复的单词。不是你的错,这与我需要的很接近,我给你的信息不正确。
  • @AndrewAlexander,请告诉我你把它包装在一个事务中并且能够ROLLBACK;...或者在某处有备份=(.
  • 你不应该在生命数据上这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2017-10-11
相关资源
最近更新 更多