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