问题: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