选择并删除具有特定ID的重复记录

时间:2016-07-01 12:16:47

标签: mysql sql

我有一个带有自动增量ID的600.000记录的MySQL数据库。 我插入了超过20,000个记录,ID超过700.000。

我想获取插入记录的ID(即id> 700000),其中包含重复的' field1'值。

我试试:

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为<700000 ...

的那些

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

首先,您可以使用条件聚合来执行此操作:

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

或者,如果您只想要大于700000的ID,请使用:

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)上的索引也可能会有所帮助。

答案 1 :(得分:0)

进行自我加入以获取重复的ID:

select *
from my_table t1
inner join my_table t2 on t1.field1=t2.field1
where t1.id<70000 and t2.id>=70000

答案 2 :(得分:0)

您可以在表格的两个实例之间使用INNER JOIN。然后删除符合删除条件的实例。

DELETE t2
FROM my_table t1 
INNER JOIN my_table t2 ON t1.field1 = t2.field1
AND t1.id < 700000 AND t2.id >= 700000;

注意: t2实例保存与field1值匹配的记录与id < 700000记录的记录。因此,删除t2会使表格缺少重复的field1值。