在一个字段中查找重复项很容易:
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
该查询将为我们提供John,Sam,Tom,Tom,因为它们都相同email。
email
但是,我想要的是获取具有email 和的 重复项name。
name
也就是说,我想获得“ Tom”,“ Tom”。
我需要这个的原因:我犯了一个错误,并允许插入重复项name和email值。现在,我需要删除/更改重复项,因此我需要先 找到 它们。
SELECT name, email, COUNT() FROM users GROUP BY name, email HAVING COUNT() > 1
只需将两个列都分组即可。
注意:较早的ANSI标准将在GROUP BY中包含所有非聚合的列,但是随着“功能依赖”的思想而改变了这一点:
在关系数据库理论中,功能依赖关系是数据库中某个关系中两组属性之间的约束。换句话说,功能依赖性是描述关系中属性之间关系的约束。