7

我正在编写一个 MySQL 查询,我可以从用户表中获取所有具有重复电子邮件地址的记录。

这是我到目前为止的查询.. 我的 PHPMyAdmin 不断加载:

select personal_email, userid
from user
where personal_email in (
select personal_email
from user
group by personal_email
having count(personal_email) > 1);

如果我使用下面的查询,我只会收到一次所有双重电子邮件:

select personal_email, count(personal_email)
from user
group by personal_email
having count(personal_email) > 1

目标是获取所有包含重复电子邮件的记录。

4

4 回答 4

5

尝试使用 JOIN 而不是查询IN

SELECT  user.personal_email, user.userid
FROM    user 
        INNER JOIN
        (   SELECT  personal_email
            FROM    User
            GROUP BY personal_email
            HAVING COUNT(*) > 1
        ) dupe
            ON dupe.personal_email = user.personal_email;

MySQL 通常会更好地优化 INNER JOIN。

于 2013-09-18T14:29:26.570 回答
4

在 MySQL 中执行此操作的最有效方法可能是使用exists子句:

select u.*
from user u
where exists (select 1
              from user u2
              where u.personal_email = u2.personal_email and
                    u.userid <> u2.userid
             );

为获得最佳性能,请在user(personal_email, userid).

于 2013-09-18T14:31:09.340 回答
1

您可以将该结果用作您的选择标准

select * from user where personal_email IN (

   select personal_email
   from user
   group by personal_email
   having count(personal_email) > 1 );

一个sqlfiddle 给你

于 2013-09-18T14:28:27.127 回答
0

您可以通过电子邮件将表格加入到自身中:

select distinct u1.personal_email, u1.userid
from user u1
join user u2 on u2.personal_email = u2.personal_email
    and u2.userid != u1,userid

这项工作的关键是添加u2.userid != u1,userid连接条件以防止行连接到自身。

于 2013-09-18T14:30:55.737 回答