1

我需要清除我的数据库,我需要删除基于 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不是很好,不知道。

我非常感谢任何帮助。

提前致谢。

4

2 回答 2

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
)
于 2013-04-23T18:00:49.043 回答
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 小提琴演示

只需重新阅读您的帖子 - 如果您想删除更高的 ID,请使用 > 代替。

于 2013-04-23T18:06:40.490 回答