代码之家  ›  专栏  ›  技术社区  ›  Johan Bresler

最快的“获取重复项”SQL脚本

  •  43
  • Johan Bresler  · 技术社区  · 17 年前

    快速SQL在具有数十万条记录的数据集中获取重复数据的示例是什么。我通常会使用以下内容:

    SELECT afield1, afield2 FROM afile a 
    WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1);
    

    但这相当缓慢。

    5 回复  |  直到 14 年前
        1
  •  78
  •   Vinko Vrsalovic    17 年前

    这是更直接的方式:

    select afield1,count(afield1) from atable 
    group by afield1 having count(afield1) > 1
    
        2
  •  16
  •   Tony Andrews    17 年前

    你可以试试:

    select afield1, afield2 from afile a
    where afield1 in
    ( select afield1
      from afile
      group by afield1
      having count(*) > 1
    );
    
        3
  •  5
  •   Community Mohan Dere    9 年前

    上周也提出了类似的问题。这里有一些很好的答案。

    SQL to find duplicate entries (within a group)

    但如果行具有相同的键值(afield1),则它们属于同一组。

    答案有三种:

    表和被视为表的组之间的内部联接(我的答案)

        4
  •  5
  •   Magnus Smith    15 年前

    delete from MyTable where MyTableID in (
      select max(MyTableID)
      from MyTable
      group by Thing1, Thing2, Thing3
      having count(*) > 1
    )
    
        5
  •  4
  •   Simon E. pbs    14 年前

    这应该相当快(如果对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(*) 你不能检查是否有错误