文巾解题 196. 删除重复的电子邮箱

Posted 刘文巾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文巾解题 196. 删除重复的电子邮箱相关的知识,希望对你有一定的参考价值。

1 题目描述

2 解题思路

2.1 双表联立

DELETE p1 
FROM Person p1, Person p2
WHERE p1.Email = p2.Email 
      AND p1.Id > p2.Id

把相同邮箱,大的都去掉

2.2 使用子查询

用子查询的分组操作,找到每一个email的最小id号,然后将不是最小id号的删除

DELETE p1 
FROM Person p1
WHERE p1.Id NOT IN (
        SELECT(a.id) 
        FROM(SELECT MIN(P2.Id) AS id
            FROM PERSON P2
            GROUP bY P2.Email) a)

这道题卡了一段时间,一开始我是这么写的:

DELETE p1 
FROM Person p1
WHERE p1.Id NOT IN (
        SELECT MIN(P2.Id) AS id
            FROM PERSON P2
            GROUP bY P2.Email)

然后报错“You can't specify target table 'p1' for update in FROM clause“

什么意思呢?就是我们在DELETE Person表的同时,对Person表进行了子查询,SELECT筛选操作。

解决方法就像上面一样,我们再套一层。这样进行DELETE和筛选的表就不一样了

以上是关于文巾解题 196. 删除重复的电子邮箱的主要内容,如果未能解决你的问题,请参考以下文章

文巾解题 82. 删除排序链表中的重复元素 II

196. 删除重复的电子邮箱

Lc196-删除重复的电子邮箱

LC-196 删除重复的电子邮箱

leetcode(196)---删除重复的电子邮箱

20.4.25 删除重复的电子邮箱 简单 196