196. 删除重复的电子邮箱(SQL)

一、题目描述

编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
±—±-----------------+
| Id | Email |
±—±-----------------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
±—±-----------------+
Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:
±—±-----------------+
| Id | Email |
±—±-----------------+
| 1 | [email protected] |
| 2 | [email protected] |
±—±-----------------+

二、题解
方法一:delete + join
我们可以使用如下代码将Person表与其自身结合起来

SELECT * FROM Person p1 join Person p2 on p1.Email = p2.Email;

然后查找出id较大的

SELECT * FROM Person p1 join Person p2 on p1.Email = p2.Email AND p1.Id > p2.Id;```

最后转化为delete子句
```sql
DELETE p1 
FROM Person p1 JOIN Person p2 
ON p1.Email = p2.Email AND p1.id>p2.id;

当然也可可以使用where语句

Delete p1 from Person p1,Person p2
where p1.Email = p2.Email AND p1.id>p2.id;

猜你喜欢

转载自blog.csdn.net/qq_38748148/article/details/113407384