Найти и сгруппировать дубликаты - PullRequest
0 голосов
/ 08 июля 2011

Надеюсь, я смогу объяснить, чего я пытаюсь достичь, я думаю, это немного сложно.

У меня есть две таблицы, подобные этой:

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

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

Япытаясь добиться этого: В конце я хочу получить список всех «Имен», которые имеют повторяющиеся значения MD5 и в которых были найдены другие «Имена» этих значений MD5.

Итак, я хочу получить что-то вродеthis:

Name1 имеет 5 повторяющихся записей в «md5s» с Name8, 4 с Name10 ...

Мне нужен список для всех «Имен», как описано выше.

Надеюсь, это имеет смысл для кого-то.:)

Я уже пробовал это с этим оператором SQL:

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

Но это дает мне только дубликаты md5.Отношение к остальным полностью отсутствует.

* редактировать: исправлена ​​опечатка

1 Ответ

1 голос
/ 08 июля 2011

Я чувствую, что должно быть лучшее решение, чем это, но вот что я собрал для вас:

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 были в одной записи, но, поскольку они находятся в отдельных таблицах, я думаю, что вам нужны две версии каждой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...