在MySQL中查找列上具有相同值的行
在[member]表中,某些行具有与电子邮件列相同的值 有些人使用不同的登录id,但使用相同的电子邮件地址,此列上未设置唯一约束。现在我需要找到这些行,看看是否应该删除它们 我应该使用什么SQL语句来查找这些行?MySQL 5这里是一个查询,用于查找用于多个登录id的电子邮件:在MySQL中查找列上具有相同值的行,sql,mysql,database,Sql,Mysql,Database,在[member]表中,某些行具有与电子邮件列相同的值 有些人使用不同的登录id,但使用相同的电子邮件地址,此列上未设置唯一约束。现在我需要找到这些行,看看是否应该删除它们 我应该使用什么SQL语句来查找这些行?MySQL 5这里是一个查询,用于查找用于多个登录id的电子邮件: select email from mytable group by email having count(*) >1 您需要第二个嵌套查询才能通过电子邮件获取登录id列表。此查询将为您提供电子邮件地址列表以及使
select email from mytable group by email having count(*) >1
您需要第二个嵌套查询才能通过电子邮件获取登录id列表。此查询将为您提供电子邮件地址列表以及使用次数,使用次数最多的地址排在第一位 选择电子邮件, 把*算作c 从桌子上 通过电子邮件分组 c>1的 按c描述订购 如果需要完整的行,请执行以下操作:
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)
这将返回所有已删除的记录john123@hotmail.com作为登录id值。使用带有内部选择查询的条件,根据需要获取整个记录 挑选* 来自成员 选择电子邮件中的电子邮件位置 来自成员 其中login\u id=abcd。user@hotmail.com 这个效果最好 截图
公认的答案不适用于博士后,但这个答案适用。@HLGEM:count1同样适用,而且性能更高。从他那里学会了这个把戏-@jpaugh,可能不想使用count1创建的本质上是无限递归的东西,或者mysql上的一些东西,由于连接太多而导致数据库死机:-/在这种情况下,COUNTemail将始终为1,因此您的查询将不返回任何内容。不,查询实际上提供了我需要的数据,这显然是那些拥有相同电子邮件的人的电子邮件和登录名。如果您按电子邮件和登录id分组,您将计算相同电子邮件和登录的行数,在您的示例中,这些行数是不同的,因此计数将始终为1。以下是返回0行的查询:
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)
SELECT RollId, count(*) AS c
FROM `tblstudents`
GROUP BY RollId
HAVING c > 1
ORDER BY c DESC