VIRTUALS

the virtual labs for the virtuals

0%

LeetCode 196. 删除重复的电子邮箱

摘要:
考察字段值不唯一情况下的自连接(全排列映射)。

题目

LeetCode 196. 删除重复的电子邮箱

自连接

通过 Email 字段自连接,生成一张临时表。在这张表中,因为 Email 字段值存在重复,所以会存在交叉映射记录。
如对于表 Person:

id Email
1 [email protected]
2 [email protected]
3 [email protected]

建立自连接:
select a.id, a.Email, b.id, b.Email from Person a inner join Person b on a.email = b.email;
后形成临时表:

id Email id(1) Email(1)
1 [email protected] 1 [email protected]
3 [email protected] 1 [email protected]
2 [email protected] 2 [email protected]
1 [email protected] 3 [email protected]
3 [email protected] 3 [email protected]

由上可知,显然只有 Email = [email protected] 的情况,两张表映射唯一。
而对于 Email = [email protected] 的情况,存在 $4$ 种全排列映射情况。

为了删除重复记录中 id 最大的记录,可以限定条件:a.id > b.id

1
2
3
delete a from Person as a
inner join Person as b
on a.email = b.email and a.id > b.id;