题目描述
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个
Result
先上答案
delete from person where Id not in (select t.Id from (select min(Id) as Id, Email from person group by Email)as t);
解析:
第一步:
审题:题目要求删除, 很多都会以为可以直接使用select来进行解答,导致测试验证得不出正确的答案
第二步:
思路:去除重复重复邮箱,并留下最小的Id,首先可以排除使用distinct关键字,因为并不知道去除重复的里面会不会留下最小Id,这时候我们可以想到使用group by先进行分组,同时我们可以使用min()函数获取到每一分组中的最小Id(这时候查询出来的Id是所有邮箱对应的最小Id),然后通过使用Id not in进行排序作为where条件即可得出结果