
此题需要注意的是题目要求是删除,故而不能使用group by,来查询
解法如下,采用窗口函数
delete from Person
where Id
in
(
select
t1.Id
from(
select
Id,Email,
row_number()over(partition by Email order by Id) rn
from Person
) t1
where t1.rn>1
);
不采用窗口函数的解法
首先查询出要删除的数据
SELECT p1.*
FROM Person p1,
Person p2
WHERE
p1.Email = p2.Email AND p1.Id > p2.Id
;
然后删掉
DELETE p1.* FROM Person p1,
Person p2
WHERE
p1.Email = p2.Email AND p1.Id > p2.Id
;
这篇博客探讨了如何在不使用groupby的情况下从数据库中删除重复数据。提供了两种解法,一是利用窗口函数,通过row_number()对每个Email分组并删除rn大于1的记录;二是通过自连接查询出要删除的重复记录并进行删除操作。内容主要涉及SQL查询和数据库优化。
982

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



