【sql】删除重复的邮件 Delete Duplicate Emails

问题:this

Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.spa

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
Id is the primary key column for this table.

For example, after running your query, the above Person table should have the following rows:code

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+

解决:it

① 能够首先找出全部不重复的邮箱,而后取个反就是重复的邮箱,都删掉便可,那么咱们如何找出全部不重复的邮箱呢,咱们能够按照邮箱群组起来,而后用Min关键字挑出较小的,而后取补集删除便可。962mstable

DELETE FROM Person
WHERE Id NOT IN
(SELECT Id FROM
    (SELECT MIN(Id) Id FROM Person GROUP BY Email) p
);email

② 使用内交让两个表以邮箱关联起来,而后把相同邮箱且Id大的删除掉;954mssed

DELETE p2 FROM Person p1 JOIN Person p2
ON p2.Email = p1.Email WHERE p2.Id > p1.Id;im

③ 直接用where将两表关联起来;1444ms。tab

DELETE p2 FROM Person p1,Person p2
WHERE p1.Email = p2.Email AND p2.Id > p1.Id;ping

相关文章
相关标签/搜索