对MySQL中部分匹配的字段进行分组

时间:2010-01-21 21:07:54

标签: mysql duplicates partial matching

我正在尝试在用户表中返回重复记录,其中字段仅部分匹配,并且匹配字段内容是任意的。我不确定我是否正在解释它,所以这里是我可能运行的查询以通过一些独特的字段获取重复的成员:

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 :(得分: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 + ',%'
    )   

这取决于当有多个电子邮件地址时,您的电子邮件地址的格式是否一致。如果逗号后面总是有空格,或者如果引号实际上是数据的一部分,则可能需要稍微修改查询。

答案 1 :(得分:0)

这对我有用;可能做不到你想做的事:

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