Mysql 获取具有重复电子邮件地址的所有用户
我正在编写一个MySQL查询,在这里我可以从用户表中获得具有重复电子邮件地址的所有记录 这是我到目前为止提出的问题。。我的PHPMyAdmin一直在加载: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); 如果我使用下面的查询,
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
);