查找MySQL中列上具有相同值的行

时间:2009-11-23 22:33:19

标签: sql mysql database

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

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

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

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

9 个答案:

答案 0 :(得分:286)

此查询将为您提供电子邮件地址列表及其使用次数,并使用最常用的地址。

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
)

答案 1 :(得分:53)

select email from mytable group by email having count(*) >1

答案 2 :(得分:12)

以下是查询email的查询,这些查询用于多个login_id

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

您需要第二个(嵌套)查询才能获得login_id的{​​{1}}列表。

答案 3 :(得分:9)

接受的答案的第一部分对MSSQL不起作用 这对我有用:

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

答案 4 :(得分:4)

如果您的电子邮件列包含空值

,请使用此选项
 select * from table where email in (
    select email from table group by email having count(*) > 1 and email != ''
    )

答案 5 :(得分:2)

谢谢你们:-)我使用下面的内容,因为我只关心这两个专栏而不是其他专栏。工作得很好

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

答案 6 :(得分:2)

我知道这是一个非常老的问题,但这对其他可能遇到相同问题的人来说更有效,我认为这对想要的东西更为准确。

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

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

答案 7 :(得分:0)

使用带有内部选择查询的条件,根据需要获取整个记录。

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

答案 8 :(得分:0)

效果最好

屏幕截图 enter image description here

removeAttribute()