Группировка полей, которые частично совпадают в MySQL - PullRequest
0 голосов
/ 22 января 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 22 января 2010

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

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

0 голосов
/ 22 января 2010

Что-то вроде этого может работать для вас:

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 + ',%'
    )   

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

...