2011-07-08 43 views
0

希望我能夠解釋我想實現的目標,我認爲這有點複雜。查找並分組重複項

我有兩個表是這樣的:

ID | Names 
-------------- 
A | Name1 
B | Name2 
C | Name3 

ID | md5s 
-------------- 
A | a 
A | b 
B | c 
C | a 
C | c 

我試圖做到這一點:最後,我想有一個有重複的MD5值,並在其他所有的「名稱」列表「名稱「這些MD5值被找到。

所以,我想是這樣的:

名1在「md5s」與Name8,4 Name10 5個重複條目...

我需要爲所有的「名稱」列表中描述的一樣以上。

希望對某人有意義。 :)

我已經與這條SQL語句試了一下:

SELECT names,COUNT(names) AS Num FROM tablename GROUP BY names HAVING(Num > 1); 

但是,這給了我只有那些重複的md5s。與其餘的關係完全沒有了。

*編輯:固定錯字

回答

1

我覺得必須有比這更好的解決辦法,但這裏是我一起拋出你:

SELECT a.names NAME, 
     b.names DUPE_NAME, 
     COUNT(*) NUM_DUPES 
FROM names_tbl a, names_tbl b, md5_tbl md5a, md5_tbl md5b 
WHERE a.id < b.id 
AND  a.id = md5a.id 
AND  b.id = md5b.id 
AND  md5a.md5 = md5b.md5 
GROUP BY a.names, b.names 
ORDER BY a.names 

經驗與查找重複的規則是你可能需要做一個自我加入。如果名稱和它們相關的md5在同一條記錄中,這會更簡單,但是因爲它們在單獨的表格中,所以我認爲每個表格需要兩個版本。

+0

嗨大衛,這似乎工作,謝謝你。只有最後一個「問題」。每個「結果組」出現兩次。最後我們有A - B = 11和B - A = 11。有沒有可能用SQL解決這個問題,還是我必須在腳本中處理這個問題? – Andy

+0

嗨,安迪,修正了劇本。我沒有加入a.id <> b.id,而是將它修改爲a.id

+0

真棒,現在我很高興,謝謝你的時間。 :) – Andy