在[member]表中,某些行具有email
列的相同值。
login_id | email
---------|---------------------
john | john123@hotmail.com
peter | peter456@gmail.com
johnny | john123@hotmail.com
...
有些人使用了不同的login_id但是使用了相同的电子邮件地址,没有为此列设置唯一约束。现在我需要找到这些行,看看是否应该删除它们。
我应该使用什么SQL语句来查找这些行? (MySQL 5)
答案 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)