小编psy*_*lus的帖子

MYSQL重复数据删除并删除数据最少的重复行

我正在使用具有以下三列的MYSQL数据库:电子邮件,姓名,姓氏。

我需要做的是对电子邮件重复数据删除,我知道可以在其中使用此功能(此查询只是为了排序而不是删除):

select distinct emails, name, surname from emails;
Run Code Online (Sandbox Code Playgroud)

要么

select emails, name, surname from emails group by emails having count(*) >= 2;
Run Code Online (Sandbox Code Playgroud)

但是,我还需要确保当发现重复的电子邮件地址时,保留的是具有名称和/或姓氏值的电子邮件地址。

例如:

| id | 电子邮件| 名称| 姓|
| 1 | bob@bob.com | 鲍勃 保罗|
| 2 | bob@bob.com | | |

在这种情况下,我想保留第一个结果并删除第二个结果。

我一直在研究使用“ case”或“ if”语句,但是对使用这些语句没有经验。我尝试使用这些语句扩展上述功能,但无济于事。

有人能指出我正确的方向吗?

PS:表中的第一列是自动递增的id值,以防

更新1:到目前为止,下面的@Bohemian答案有效,但在一种情况下失败,即重复的电子邮件地址在其中一行中有一个名字但没有姓氏,而在下一行中它没有名称但有姓氏。它将保留两个记录。所有需要编辑的就是无论哪一条记录都将被删除。

更新2:@Bohemian的答案很好,但经过更多测试,我发现它有一个根本性的缺陷,即只有当重复的电子邮件行中名称和姓氏字段具有数据(例如上表)。如果电子邮件重复,但没有任何行同时填写名称和姓氏字段,则所有这些行都将被忽略并且不会重复数据删除。

该查询的最后一步是弄清楚如何删除不符合当前必要条件的重复项。如果其中一行仅包含姓名,另一行仅包含姓氏,那么删除哪一行实际上并不重要,因为保留电子邮件是重要的事情。

mysql

5
推荐指数
1
解决办法
5598
查看次数

标签 统计

mysql ×1