我有以下查询,用于在mysql db中查找重复的电子邮件地址。它返回部分匹配重复值,如何仅获取完全匹配?
SELECT id, email, date FROM mytable GROUP BY email HAVING COUNT(email) > 1
例如,它给出以下结果:
[email protected]@bar.net
或
[email protected]@foo.com
或
@@ 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`
Here is an example mocked up in sqlfiddle.
希望这会有所帮助!