2016-01-20 72 views
0

我想删除我的表的一些重复行。我开始通过执行这个查询选择所有重复的行:如何删除一些重复的行

SELECT a.id as id FROM table A join table B on A.site = B.site 
where A.nb_affichages = B.nb_affichages and A.nb_clics = A.nb_clics 

然后我试着从第一个查询删除所有选择的IDS:

DELETE FROM table WHERE id IN (SELECT * FROM (SELECT a.id as id FROM table A join table B on A.site = B.site 
where A.nb_affichages = B.nb_affichages and A.nb_clics = A.nb_clics) AS p) 

这第二个查询删除所有行在第一个选择,而不是我想让一行和删除其他人。

所以任何人都可以帮助我优化这个查询。

回答

2

它将保留重复值的第一个数据,并将删除重复值的所有其余值。

DELETE c1 
FROM table c1, table c2 
WHERE c1.nb_affichages = c2.nb_affichages 
AND c1.nb_clics = c2.nb_clics 
AND c1.site = c2.site 
AND c1.id > c2.id; 
+1

为什么条件'A.site = B.site'被删除? – mnv

+1

我没有看到这种情况。我将编辑@mnv。感谢您指出。 –