文巾解题 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. 删除重复的电子邮箱的主要内容,如果未能解决你的问题,请参考以下文章