2010-01-21 3 views
0

Я пытаюсь вернуть повторяющиеся записи в пользовательской таблице, где поля только частично совпадают, а содержимое соответствующего поля является произвольным. Я не уверен, если я объясняю это хорошо, так вот вопрос я мог бы работать, чтобы получить пользователь дублирующих некоторым уникального поля:Группировка полей, которые частично совпадают в MySQL

SELECT MAX(id) 
FROM members 
WHERE 1 
GROUP BY some_unique_field 
HAVING COUNT(some_unique_field) > 1 

Я хочу, чтобы применить эту же идею к области электронной почты, но, к сожалению, наше поле электронной почты может содержать несколько электронных писем, разделенных запятой. Например, я хочу, чтобы член с его электронной почтой был настроен на «[email protected]», который должен быть возвращен как дубликат другого участника, который имеет «[email protected]», «[email protected]» в своей области. GROUP BY, очевидно, не выполнит это как есть.

ответ

0

Нечто подобное может работать для вас:

SELECT * 
FROM members m1 
inner join members m2 on m1.id <> m2.id 
    and (
     m1.email = m2.email 
     or m1.email like '%,' + m2.email 
     or m1.email like m2.email + ',%' 
     or m1.email like '%,' + m2.email + ',%' 
    ) 

Это зависит от того, насколько последовательно ваших адресов электронной почты отформатированы, когда есть больше чем один. Возможно, вам потребуется немного изменить запрос, если после запятой всегда есть пробел, или если кавычки фактически являются частью ваших данных.

+0

Спасибо за ответ. К сожалению, INNER JOIN таблицы наших участников - это 94 миллиона записей, и запрос занимает слишком много времени, поэтому я избегаю подобных действий. Я думаю, что если бы я разделил адреса электронной почты на их собственную таблицу, как они ДОЛЖНЫ быть, я могу сделать то, что хочу, более легко. –

0

Это работает для меня; не может делать то, что вы хотите:

SELECT MAX(ID) FROM members WHERE Email like "%someuser%" GROUP BY Email HAVING COUNT(Email) > 1

+0

Это отлично работает, пока вы можете гарантировать, что ваше поле электронной почты содержит только одно электронное письмо. Наши могут содержать кратность, разделенную запятыми, и я пытаюсь группировать частичные совпадения, что не представляется возможным, поскольку наша схема существует. –

Смежные вопросы