我需要清除我的数据库,我需要根据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不是很好而且不知道。
我非常感谢任何帮助。
提前致谢。
答案 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;
重新阅读你的帖子 - 如果你想删除更高的ID,请使用&gt;代替。