سؤال

ما هو مثال على SQL سريع للحصول على التكرارات في قواعد البيانات مع مئات الآلاف من السجلات. أنا عادة استخدام شيء مثل:

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

ولكن هذا هو بطيء جدا.

هل كانت مفيدة؟

المحلول

وهذه هي طريقة أكثر مباشرة:

select afield1,count(afield1) from atable 
group by afield1 having count(afield1) > 1

نصائح أخرى

ويمكنك أن تحاول:

select afield1, afield2 from afile a
where afield1 in
( select afield1
  from afile
  group by afield1
  having count(*) > 1
);

وبالمناسبة، إذا كان أي شخص يريد أن إزالة التكرارات، ولقد استخدمت هذا:

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

وهذا يجب أن يكون سريع معقول (حتى أسرع إذا تم فهرسة dupeFields).

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(*) لم تتمكن من التحقق ل<م> عدد المرات تتكرر عليه، إلا أنه يبدو أكثر من مرة.

scroll top