【问题标题】:Delete ALL duplicate rows in MySQL table (Not except 1, all duplicate rows) [duplicate]删除MySQL表中的所有重复行(除了1,所有重复行)[重复]
【发布时间】:2012-11-19 15:59:00
【问题描述】:

可能重复:
Remove duplicate rows in MySQL

我有一个表格“recipientscore”,如下所示:

  • recipientid / messageid
  • 1 / 1
  • 2 / 2
  • 3 / 2
  • 4 / 2
  • 5 / 3
  • 6 / 4

我想要做的是删除所有出现两次或更多的记录。我不想保留每个重复记录的一个版本。清理后是这样的:

  • recipientid / messageid
  • 1 / 1
  • 5 / 3
  • 6 / 4

你有什么想法吗?

谢谢!

【问题讨论】:

  • 我会将不同的记录放入临时表中,删除旧的并将临时重命名为旧名称 ;-)
  • 我认为这 not 与上述问题重复,因为希望删除 all 重复项(即 not 删除除一个之外的所有内容,并保留一个)。

标签: mysql sql


【解决方案1】:
delete from recipientscore
where messageid in
(
   select * from
   (
      select messageid from recipientscore
      group by messageid
      having count(*) > 1
   ) x
)

SQLFiddle demo

【讨论】:

  • 您好 Juergen d,我尝试了您的方法,但出现以下错误:#1093 - 您无法在 FROM 子句中指定目标表 'recipientscore' 进行更新。你会建议我做什么?
  • 试试我的更新。您可以使用子选择来欺骗 MySQL。
  • 当我进行选择时,在我看来它只适用于出现两次而不是 3、4、5 次的行...
  • 它有效。见this SQLFiddle demo
【解决方案2】:

“juergen d”给出的答案是完美的。如果您希望只保留一个唯一行并删除剩余的重复行,您可以试试这个。

ALTER IGNORE TABLE recipient score  ADD UNIQUE KEY idx1(messageid); 

【讨论】:

  • 但这将保留每个组中的一个,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2011-06-08
  • 2016-11-25
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多