希望我能够解释我想要实现的目标,我认为这有点复杂。
我有两张这样的表:
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。与其他人的关系完全缺失。
*编辑:修复错误
答案 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位于同一记录中,这会更简单,但由于它们位于不同的表中,我认为您需要每个表的两个版本。