我正在处理一个MYSQL数据库,它有以下三列:电子邮件,姓名,姓氏。MYSQL重复删除重复行并删除重复行数据最少
我需要做的就是重复数据删除,我知道我可以使用的功能,如这一个(这个查询只是排序未删除)的邮件:
select distinct emails, name, surname from emails;
或
select emails, name, surname from emails group by emails having count(*) >= 2;
不过,我还需要确保在发现重复的电子邮件地址时,保留的电子邮件地址是具有名称和/或姓氏值的电子邮件地址。
例如:
| id |电子邮件 |名称|姓氏
| 1 | [email protected] |鲍勃 |保尔森 |
| 2 | [email protected] | | |
在这种情况下,我想保留第一个结果并删除第二个。
我一直在寻找使用'案例'或'如果'的陈述,但没有经验与使用这些。我试图用这些陈述扩展上述功能,但无济于事。
任何人都可以指向正确的方向吗?
PS:表中的第一列是自动增加一个ID值,如果可以帮助
更新1:下面到目前为止@Bohemian答案是伟大的工作,但在一种情况下发生故障,其中有一个重复电子邮件地址在一行中有一个名字,但没有姓,在下一行它没有名字,但有一个姓。它将保留这两个记录。所有需要编辑的内容都是为了让这两个记录中的一个被删除,不管是哪一个。
更新2:@波希米亚的答案很好,但经过更多测试后,我发现它存在一个根本性的缺陷,它只在存在重复的电子邮件行时名称和姓氏字段有数据上表中的第一项)。如果电子邮件重复,但所有行都没有填写名称和姓氏字段,则所有这些行都将被忽略,并且不会进行重复数据删除。
此查询的最后一步是找出如何删除不符合当前必要条件的重复项。如果一行只有名字而另一行只是姓氏,那么删除它并不重要,因为电子邮件是重要的事情。
当一行有名字和下一个姓氏时需要做什么? –
这是你打算定期做的事情,还是只是一次性修复? – martin
在这种情况下,我会认为最好的解决方案是将两者连接起来,尽管我认为这会使问题变得复杂。 – psychedelus