数据库每日一题 --- 第 6 天:删除重复的电子邮箱

一、问题描述
表: Person
复制代码
编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个 id 最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
查询结果格式如下所示。
题目链接:删除重复的电子邮箱
二、题目要求
样例
复制代码
考察
复制代码
三、问题分析
通常对于单个表进行操作的时候,我们通常采用自连接的方式,自连接其实本质上就是内连接的一种。
对于这一题,首先题目要求我们使用delete语句完成,如果只要求输出结果结果的话,我们可以使用distinct直接唯一化输出结果。
对于这一题如何使用delete语句输出结果呢?
先从Person表中定义两个 p1、p2 指向表中的数据,从通过 p1 从表的第一条数据开始遍历,和 p2 的数据进行比较。
如果数据满足email的值相同,并且id值比p2要大,这样就满足了删除重复的电子邮箱,并且优先保留序号较小的id数据。
四、编码实现
复制代码
五、测试结果
版权声明: 本文为 InfoQ 作者【知心宝贝】的原创文章。
原文链接:【http://xie.infoq.cn/article/4dd0d1cd554dac14deb07cda7】。文章转载请联系作者。










评论