• LeetCode--196. 删除重复的电子邮箱


    1 题目描述

    表: Person

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | id          | int     |
    | email       | varchar |
    +-------------+---------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    id 是该表的主键列(具有唯一值的列)。
    该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

    编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件, 请注意你应该编写一个 DELETE 语句而不是 SELECT 语句

    运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要

    返回结果格式如下示例所示。

    示例 1:

    输入:
    Person 表:

    +----+------------------+
    | id | email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    | 3  | john@example.com |
    +----+------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出:

    +----+------------------+
    | id | email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    +----+------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解释: john@example.com 重复两次。我们保留最小的Id = 1

    2 解题思路

    1. 使用 inner join,形成笛卡尔积
    2. 如果 email 相同,但是id不同说明有重复
    3. email 相同的, 需要把 id 大的删除,从而保留小id的数据

    2.1 代码实现

    1. Person p1 inner join Person p2 on p1.email = p2.email, Person表内联自己, 查询 email 相同的数据
      image.png
      查询出来的数据 2, 3, 4 行是同一条数据关联自己
    2. where p1.id > p2.id 从 eamil 相同数据中筛选出不是同一条数据, 且 id 大的数据
      image.png
    3. delete p1 from Person p1 指定删除 p1 表中的数据

    最终代码实现

    delete p1 from Person p1 inner join Person p2 on p1.email = p2.email where p1.id > p2.id
    
    • 1
  • 相关阅读:
    桥接模式(结构型)
    【JVM技术专题】 深入分析字节码指令重排序技术「原理篇」
    OFD板式文件创建JAVA工具-EASYOFD 七、 电子签章及验签 Seal
    洛谷P1058 立体图
    心里明白,面上糊涂
    matlab检索相似图像
    基于VHDL的简易CPU设计
    Java_抽象类
    PlotNeuralNet resnet34和resnet18绘图
    Linux常用指令(九)——软件安装
  • 原文地址:https://blog.csdn.net/weixin_57672329/article/details/134092215