查找并分组重复项

时间:2011-07-08 11:46:34

标签: sql sqlite

希望我能够解释我想要实现的目标,我认为这有点复杂。

我有两张这样的表:

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

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

我正在努力实现这一目标:最后,我希望列出所有具有重复MD5值的“名称”,并在其中“命名”这些MD5值。

所以我希望得到这样的东西:

Name1在“md5s”中有5个重复的条目,Name8,4个名称为10 ...

我需要一个如上所述的所有“名字”的列表。

希望这对某人有意义。 :)

我已经尝试过这个SQL语句:

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

但这只给了我重复的md5。与其他人的关系完全缺失。

*编辑:修复错误

1 个答案:

答案 0 :(得分: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位于同一记录中,这会更简单,但由于它们位于不同的表中,我认为您需要每个表的两个版本。