在MySQL的列中找到具有相同值的行

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

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

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

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

547223 次浏览
select email from mytable group by email having count(*) >1

下面是一个查询,用于查找用于多个login_idemail:

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

你需要第二个(嵌套的)查询来通过email获取login_id的列表。

这个查询会给你一个电子邮件地址的列表,以及它们被使用的次数,最常用的地址在前面。

SELECT email,
count(*) AS c
FROM TABLE
GROUP BY email
HAVING c > 1
ORDER BY c DESC

如果你想要完整的行:

select * from table where email in (
select email from table
group by email having count(*) > 1
)

接受的答案的第一部分不适用于MSSQL

select email, COUNT(*) as C from table
group by email having COUNT(*) >1 order by C desc

谢谢大家:-)我使用下面的,因为我只关心这两列,而不太关心其他的。伟大的工作

  select email, login_id from table
group by email, login_id
having COUNT(email) > 1

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

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

我知道这是一个非常老的问题,但这是为其他人可能有同样的问题,我认为这是更准确的想要的。

SELECT * FROM member WHERE email = (Select email From member Where login_id = john123@hotmail.com)

这将返回login_id值为john123@hotmail.com的所有记录。

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

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

这样效果最好

< p >截图 enter image description here < / p >
SELECT RollId, count(*) AS c
FROM `tblstudents`
GROUP BY RollId
HAVING c > 1
ORDER BY c DESC

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

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