我有一个具有自动递增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/