Mysql 获取具有重复电子邮件地址的所有用户

Mysql 获取具有重复电子邮件地址的所有用户,mysql,sql,Mysql,Sql,我正在编写一个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); 如果我使用下面的查询,

我正在编写一个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

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

您可以使用该结果作为选择标准

select * from user where personal_email IN (

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

A.

尝试使用联接而不是IN进行查询:


MySQL通常会更好地优化内部连接。

您可以通过电子邮件将表连接到自身:

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添加到连接条件,以防止行连接到自身

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


为了获得最佳性能,请在userpersonal_电子邮件上创建一个索引,即userid。

您的第一个查询应该可以工作。它可能很慢的原因是个人电子邮件上没有索引。个人电子邮件是索引字段吗?谢谢!!这起到了作用:
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
select u.*
from user u
where exists (select 1
              from user u2
              where u.personal_email = u2.personal_email and
                    u.userid <> u2.userid
             );