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

编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+

Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+
MySQL 不能对同一张表,一边进行查询一边进行删除操作,报错:You can't specify target table 'Person' for update in FROM clause

替换的操作是: 查询先生成一张临时表,然后对临时表查询对原表进行删除,这样就解决了不能一边查询一遍删除的问题
Delete
from Person
where Id not in(
    select need.id
    from(
        select min(Id) as id
        from Person
        group by Email
    ) as need
)

 

你可能感兴趣的:(MySQL)