写点什么

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

作者:知心宝贝
  • 2022 年 6 月 08 日
  • 本文字数:752 字

    阅读完需:约 2 分钟

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

一、问题描述

表: Person


+-------------+---------+| Column Name | Type    |+-------------+---------+| id          | int     || email       | varchar |+-------------+---------+id是该表的主键列。该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
复制代码


编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个 id 最小的唯一电子邮件。


任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)


查询结果格式如下所示。


题目链接:删除重复的电子邮箱

二、题目要求

样例

输入: Person 表:+----+------------------+| id | email            |+----+------------------+| 1  | john@example.com || 2  | bob@example.com  || 3  | john@example.com |+----+------------------+输出: +----+------------------+| id | email            |+----+------------------+| 1  | john@example.com || 2  | bob@example.com  |+----+------------------+解释: john@example.com重复两次。我们保留最小的Id = 1。
复制代码

考察

1.delete删除、自连接2.建议用时10~25min
复制代码

三、问题分析

通常对于单个表进行操作的时候,我们通常采用自连接的方式,自连接其实本质上就是内连接的一种。


对于这一题,首先题目要求我们使用delete语句完成,如果只要求输出结果结果的话,我们可以使用distinct直接唯一化输出结果。


对于这一题如何使用delete语句输出结果呢?


先从Person表中定义两个 p1、p2 指向表中的数据,从通过 p1 从表的第一条数据开始遍历,和 p2 的数据进行比较。


如果数据满足email的值相同,并且id值比p2要大,这样就满足了删除重复的电子邮箱,并且优先保留序号较小的id数据。

四、编码实现

delete p1from Person p1,Person p2where p1.email=p2.email and p1.id>p2.id
复制代码

五、测试结果




发布于: 刚刚阅读数: 3
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第6天:删除重复的电子邮箱_数据库_知心宝贝_InfoQ写作社区