我正在研究一个 MYSQL 数据库,它具有以下三列:电子邮件、姓名、姓氏。
我需要做的是对我知道可以使用诸如此功能的电子邮件进行重复数据删除(此查询只是为了排序而不是删除):
select distinct emails, name, surname from emails;
或者
select emails, name, surname from emails group by emails having count(*) >= 2;
但是,我还需要确保当发现重复的电子邮件地址时,保留的电子邮件地址是具有姓名和/或姓氏值的电子邮件地址。
例如:
|标识 | 电子邮件 | 姓名 | 姓氏 |
|1 | bob@bob.com | 鲍勃 | 保尔森 |
|2 | bob@bob.com | | |
在这种情况下,我想保留第一个结果并删除第二个。
我一直在研究使用“case”或“if”语句,但没有使用这些语句的经验。我尝试用这些语句扩展上述功能,但无济于事。
谁能指出我正确的方向?
PS:表中的第一列是自动递增的 id 值,以防万一
更新 1:到目前为止,@Bohemian 的回答效果很好,但在一种情况下失败了,其中有一个重复的电子邮件地址,其中一行有一个名字但没有姓氏,而在下一行它没有名字但有一个姓氏。它将保留这两个记录。需要编辑的只是删除这两条记录中的一条,不管是哪一条。
更新 2:@Bohemian 的答案很棒,但经过更多测试后,我发现它有一个根本缺陷,即它仅在名称和姓氏字段具有数据的重复电子邮件行中有效(如第一个条目)上表)。如果有重复的电子邮件,但没有一行填写姓名和姓氏字段,则所有这些行都将被忽略且不会重复数据删除。
此查询的最后一步是确定如何删除不满足当前必要条件的重复项。如果一行只有姓名,而另一行只有姓氏,那么删除哪一个并不重要,因为电子邮件是要保留的重要内容。