最快的"获取重复"SQL脚本

Joh*_*ler 43 sql scripting performance duplicates

什么是快速SQL的示例,以在具有数十万条记录的数据集中获取重复项.我通常使用类似的东西:

SELECT afield1, afield2 FROM afile a 
WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1);
Run Code Online (Sandbox Code Playgroud)

但这很慢.

Vin*_*vic 78

这是更直接的方式:

select afield1,count(afield1) from atable 
group by afield1 having count(afield1) > 1
Run Code Online (Sandbox Code Playgroud)


Ton*_*ews 16

你可以尝试:

select afield1, afield2 from afile a
where afield1 in
( select afield1
  from afile
  group by afield1
  having count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是我的首选方式,因为您可以返回表的所有列. (3认同)

Wal*_*tty 5

上周提出了一个类似的问题.那里有一些很好的答案.

用于查找重复条目的SQL(在组内)

在该问题中,OP对表(文件)中的所有列(字段)感兴趣,但如果它们具有相同的键值(afield1),则行属于同一组.

有三种答案:

where子句中的子查询,就像这里的一些其他答案一样.

表和作为表格查看的组之间的内部联接(我的答案)

和分析查询(对我来说是新的).


Mag*_*ith 5

顺便说一句,如果有人想要删除重复项,我使用了这个:

delete from MyTable where MyTableID in (
  select max(MyTableID)
  from MyTable
  group by Thing1, Thing2, Thing3
  having count(*) > 1
)
Run Code Online (Sandbox Code Playgroud)