在SQL表中查找重复值

在SQL表中查找重复值

很容易找到duplicates只有一个领域:

SELECT name, COUNT(email) FROM usersGROUP BY emailHAVING COUNT(email) > 1

所以如果我们有一张桌子

ID   NAME   EMAIL1    John   asd@asd.com2    Sam    asd@asd.com3    Tom    asd@asd.com4    Bob  
  bob@asd.com5    Tom    asd@asd.com

这个查询将给我们约翰,山姆,汤姆因为他们都有相同的email.

但是,我想要的是用相同的emailname.

也就是说,我想要“汤姆”,“汤姆”。

我需要这样做的原因是:我犯了一个错误,并允许插入副本。nameemail价值。现在我需要删除/更改复制件,所以我需要找到,发现他们先来。


拉风的咖菲猫
浏览 610回答 3
3回答

守着一只汪

SELECT     name, email, COUNT(*)FROM     usersGROUP BY     name, emailHAVING      COUNT(*) > 1只需对两列进行分组。注意:较早的ANSI标准是将组中的所有非聚合列按,但这与“功能依赖”:在关系数据库理论中,函数依赖是数据库关系中两组属性之间的约束。换句话说,函数依赖是描述关系中属性之间关系的约束。支持不一致:最近PostgreSQL支持它.SQLServer(与SQLServer 2017一样)仍然需要组中的所有非聚合列。MySQL是不可预测的,您需要sql_mode=only_full_group_by:通过显示错误的结果按名称顺序分组;在没有任何()的情况下,它是最便宜的聚合函数。(见已接受答复中的评论)。甲骨文还不够主流(警告:幽默,我不知道甲骨文)。

qq_遁去的一_1

试试这个:SELECT name, emailFROM usersGROUP BY name, emailHAVING ( COUNT(*) > 1 )
打开App,查看更多内容
随时随地看视频慕课网APP