在[member]表中,某些行对于电子邮件列具有相同的值。

login_id | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
...

有些人使用不同的login_id但相同的电子邮件地址,没有在这一列设置唯一约束。现在我需要找到这些行,看看是否应该删除它们。

我应该使用什么SQL语句来查找这些行?(MySQL 5)


当前回答

使用带有内部选择查询的条件获取您想要的整个记录。

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com) 

其他回答

如果您的电子邮件列包含空值,则使用此选项

 select * from table where email in (
    select email from table group by email having count(*) > 1 and email != ''
    )

使用带有内部选择查询的条件获取您想要的整个记录。

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com) 

在这个线程的很晚,但我有一个类似的情况,以下工作在MySQL。下面的查询还将返回与重复电子邮件条件匹配的所有行

SELECT * FROM TABLE WHERE EMAIL IN 
       (SELECT * FROM 
            (SELECT EMAIL FROM TABLE GROUP BY EMAIL HAVING COUNT(EMAIL) > 1) 
        AS X);

这样效果最好

截图

SELECT RollId, count(*) AS c 
    FROM `tblstudents` 
    GROUP BY RollId 
    HAVING c > 1 
    ORDER BY c DESC

这是一个查询,以找到使用多个login_id的电子邮件:

SELECT email
FROM table
GROUP BY email
HAVING count(*) > 1

您将需要第二个(嵌套的)查询,以通过电子邮件获得login_id列表。