题目描述
编写一个 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条件即可得出结果
本文提供了一种SQL解决方案,用于删除数据库中Person表中的重复电子邮箱记录,仅保留每个重复邮箱中ID最小的一条记录。通过使用子查询、GROUP BY和MIN函数,有效地实现了去除重复项的目标。
324

被折叠的 条评论
为什么被折叠?



