2011-07-08 44 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