快速SQL的示例是什么,可以在包含数十万条记录的数据集中获取重复项。我通常使用类似的东西:
SELECT afield1, afield2 FROM afile a
WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1);
但这很慢。
答案 0 :(得分:78)
这是更直接的方式:
select afield1,count(afield1) from atable
group by afield1 having count(afield1) > 1
答案 1 :(得分:16)
你可以尝试:
select afield1, afield2 from afile a
where afield1 in
( select afield1
from afile
group by afield1
having count(*) > 1
);
答案 2 :(得分:5)
上周提出了一个类似的问题。那里有一些很好的答案。
SQL to find duplicate entries (within a group)
在那个问题中,OP对表(文件)中的所有列(字段)感兴趣, 但如果行具有相同的键值(afield1),则属于同一组。
答案有三种:
where子句中的子查询,就像这里的其他一些答案一样。
表与作为表格查看的组之间的内部联接(我的回答)
和分析查询(对我来说是新的东西)。
答案 3 :(得分:5)
顺便说一句,如果有人想要删除重复项,我已经使用了这个:
delete from MyTable where MyTableID in (
select max(MyTableID)
from MyTable
group by Thing1, Thing2, Thing3
having count(*) > 1
)
答案 4 :(得分:3)
这应该相当快(如果dupeField被索引,则更快)。
SELECT DISTINCT a.id, a.dupeField1, a.dupeField2
FROM TableX a
JOIN TableX b
ON a.dupeField1 = b.dupeField2
AND a.dupeField2 = b.dupeField2
AND a.id != b.id
我想这个查询的唯一缺点是,因为你没有做COUNT(*)
,你无法检查重复的次数,只是它出现了不止一次。