mysql - 根据 3 列从表中清除重复条目

标签 mysql sql

我需要清除我的数据库,我需要删除所有基于 3 列的重复条目。

我试过这个:

ALTER IGNORE TABLE prod_assoc_variacao ADD UNIQUE INDEX idx_name (fk_produto, fk_grupo, fk_classificador )

但我收到错误消息,告诉我有几行有重复条目,因此删除重复条目不起作用。

所以我也试过了:

DELETE
FROM prod_assoc_variacao
WHERE prod_assoc_variacao.id IN  (  
    SELECT MAX(id)
    FROM prod_assoc_variacao
    GROUP BY fk_produto, fk_grupo, fk_classificador
    HAVING COUNT(*) > 1)

但我收到 [Err] 1093 - 您不能在 FROM 子句中指定目标表 'prod_assoc_variacao' 进行更新。

现在我不知道该怎么办,我的 sql 不是很好,也不知道。

我非常感谢任何帮助。

提前致谢。

最佳答案

可以在删除时加入表本身:

delete prod_assoc_variaca from prod_assoc_variaca
  inner join prod_assoc_variaca p2 on prod_assoc_variaca.fk_produto = p2.fk_produto 
    and prod_assoc_variaca.fk_grupo = p2.fk_grupo 
    and prod_assoc_variaca.fk_classificador = p2.fk_classificador
    and prod_assoc_variaca.id < p2.id;

SQL Fiddle Demo

只需重新阅读您的帖子——如果您想删除较高的 ID,请改用 >。

关于mysql - 根据 3 列从表中清除重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176011/

相关文章:

mysql - 每日、每周、每月和每年的报告

php - 从 mysql 表获取特定月份、php、mysql 的结果

MySQL - 为每个重复值获取一个计数器

PHP PDO 和 MySQL AGAINST() 函数

c# - 检查记录列是否有一些特殊值

c# - 如何防止 SQL Azure 中的 ASP.NET SQL 注入(inject)

sql - oracle 对象和集合

mysql - 从重型客户端项目迁移到连接的应用程序到服务器(目前正在研究 DataSnap)

mysql - 按日期时间sql合并两个表

sql - 为什么派生列组件的表达式不能在 SSIS 中使用空值?