什麼是快速SQL的例子,以便在數十萬個記錄的數據集中獲取重複數據。我通常使用類似的東西:最快的「獲取重複數據」SQL腳本
SELECT afield1, afield2 FROM afile a
WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1);
但這是相當緩慢。
什麼是快速SQL的例子,以便在數十萬個記錄的數據集中獲取重複數據。我通常使用類似的東西:最快的「獲取重複數據」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
);
類似的問題在上週問道。那裏有一些很好的答案。
SQL to find duplicate entries (within a group)
在這個問題中,OP是在表(文件),感興趣的所有列(字段), 但排在同一組屬於,如果他們有相同的密鑰值(afield1)。
有三種答案:
子查詢的WHERE子句中,像一些其他的答案在這裏。
內連接表,並看作是一個表(我回答)組
和分析查詢之間的(東西是新的我)。
順便說一句,如果有人想刪除重複的,我已經使用這個:
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(*)
,你可以不檢查次數它被複制,只知道它出現不止一次。
這實際上是我首選的方式,因爲您可以返回表格的所有列。 – leek 2008-10-13 12:15:26
奇怪的是,有2人投了這個答案,沒有評論爲什麼。我認爲這意味着它有什麼問題嗎? – 2008-10-14 15:28:32
我猜這是慢的 – 2008-10-14 21:03:29