发布日期:2018-03-26
在一个SQL表中查找重复值+ 查看更多
在一个SQL表中查找重复值
+ 查看更多
发布日期:2018-02-24 16:50
分类:SQL
浏览次数:102
很容易找到带有一个字段的重复项:
SELECT name, COUNT(email) FROM users GROUP BY email HAVING ( COUNT(email) > 1 )
所以如果我们有一个表
ID NAME EMAIL 1 John asd@asd.com 2 Sam asd@asd.com 3 Tom asd@asd.com 4 Bob bob@asd.com 5 Tom asd@asd.com
这个查询将给我们约翰,山姆,汤姆,汤姆,因为他们都有相同的电子邮件
但是,我想要的是获得重复的相同的电子邮件和名字。
也就是说,我想得到“汤姆”,“汤姆”。
我需要这个的原因:我犯了一个错误,并允许插入重复的名称和电子邮件值。现在我需要删除/更改重复,所以我需要先找到他们。
回答
SELECT name, email, COUNT(*) FROM users GROUP BY name, email HAVING COUNT(*) > 1
只需在两个列上分组。
注意:ANSI标准是在GROUP BY中具有所有非聚合列。
MySQL允许你避免这一点,但结果是不可预测的:
GROUP BY lname ORDER BY显示错误的结果 这是在没有ANY()的情况下最便宜的聚合函数(参见接受答案中的注释)