Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中查找列上具有相同值的行_Sql_Mysql_Database - Fatal编程技术网

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

在MySQL中查找列上具有相同值的行,sql,mysql,database,Sql,Mysql,Database,在[member]表中,某些行具有与电子邮件列相同的值 有些人使用不同的登录id,但使用相同的电子邮件地址,此列上未设置唯一约束。现在我需要找到这些行,看看是否应该删除它们 我应该使用什么SQL语句来查找这些行?MySQL 5这里是一个查询,用于查找用于多个登录id的电子邮件: select email from mytable group by email having count(*) >1 您需要第二个嵌套查询才能通过电子邮件获取登录id列表。此查询将为您提供电子邮件地址列表以及使

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

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

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

这里是一个查询,用于查找用于多个登录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