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