根据3列清除表中的重复条目

时间:2013-04-23 17:56:39

标签: 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不是很好而且不知道。

我非常感谢任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用的一种方法是创建临时表,在其中选择id,然后在删除语句中使用临时表

create temporary table t( id integer );

insert into t 
SELECT MAX(id)
FROM prod_assoc_variacao
GROUP BY fk_produto, fk_grupo, fk_classificador
HAVING COUNT(*) > 1;

DELETE
FROM prod_assoc_variacao
WHERE prod_assoc_variacao.id IN (
    select id from t
)

答案 1 :(得分:1)

您可以在删除中加入表格:

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,请使用&gt;代替。