我有一个带有自动增量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 ...
的那些有什么想法吗?
答案 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
值。