首页 > 解决方案 > mysql GROUP BY 查询在电子邮件字段中显示部分匹配

问题描述

我有以下查询用于在 mysql db 中查找重复的电子邮件地址。它返回部分匹配重复值,如何只获得完全匹配?

SELECT id, email, date FROM mytable GROUP BY email HAVING COUNT(email) > 1 

例如它给出以下结果:

1234567890@foo.net
1234567890@bar.net

或者

123@foo.com
456@foo.com

或者

100abc@gmail.com
100xyz@foo.com
100xhsy@bar.com

标签: mysqlgroup-byhaving

解决方案


@Abey我通过在我想要显示的字段上将表加入到自身中来做到这一点,但id两个记录之间真正唯一的值(如)不同。

以下是您将如何执行此操作:

SELECT `mt1`.`id`, 
    `mt1`.`email`, 
    `mt1`.`date` 
FROM `mytable` AS `mt1`
JOIN `mytable` AS `mt2` ON `mt2`.`email` = `mt1`.`email`
    AND `mt2`.`id` <> `mt1`.`id`
GROUP BY `mt1`.`id`

如果您想要一个不同的重复电子邮件列表并且不关心查看每个单独的记录,只需修剪您返回的其他字段,如下所示:

SELECT `mt1`.`email`
FROM `mytable` AS `mt1`
JOIN `mytable` AS `mt2` ON `mt2`.`email` = `mt1`.`email`
    AND `mt2`.`id` <> `mt1`.`id`
GROUP BY `mt1`.`email`

这是一个在 sqlfiddle 中模拟的示例。

希望这可以帮助!


推荐阅读