我有一个具有自动递增ID的600.000条记录的MySQL数据库。
我再插入20.000条ID超过700.000的记录。

我想获取具有重复的“ field1”值的插入记录的ID(即ID> 700000)。

我尝试:

SELECT id FROM my_table
WHERE id>700000
AND field1 IN (SELECT field1 FROM my_table WHERE id<700000)


此请求未运行...等待1小时后,我仍然没有任何结果。

通常,当我想抑制重复时,我会这样做:

ALTER IGNORE TABLE my_table ADD UNIQUE INDEX(field1)


但是,如果我这样做,我不确定会删除哪个重复行。我不能删除id
任何想法?

最佳答案

首先,您可以使用条件聚合来做到这一点:

select field1, group_concat(id) as ids
from my_table
group by field1
having min(id) < 700000 and max(id) > 700000;


或者,如果您只希望ID大于700000,请使用:

group_concat(case when id > 700000 then id end) as ids


您可以使用您的方法。我建议使用exists而不是in,并且您需要一个索引:

SELECT id
FROM my_table t
WHERE t.id > 700000 AND
      EXISTS (SELECT 1 FROM my_table WHERE t2.id < 700000 and t2.field1 = t.field1);


然后,您需要在my_table(field1, id)上建立索引,而在my_table(id, field1)上建立索引也可能会有所帮助。

关于mysql - 选择和删除具有特定ID的重复记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38145223/

10-11 22:20
查看更多