架构:
Truncate table Person
insert into Person (Id, Email) values (‘1’, ‘john@example.com’)
insert into Person (Id, Email) values (‘2’, ‘bob@example.com’)
insert into Person (Id, Email) values (‘3’, ‘john@example.com’)
题目:
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
Id | |
---|---|
1 | john@example.com |
2 | bob@example.com |
3 | john@example.com |
Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:
Id | |
---|---|
1 | john@example.com |
2 | bob@example.com |
提示:
执行 SQL 之后,输出是整个 Person 表。
使用 delete 语句。
思路一:
delete 类似select 用法
要用别名才可使用
delete from Person
where id not in
(select id from
(select min(Id) as id from Person group by Email)as need )
思路二:
不用select 用join on 两个表格进行匹配
delete p1.* from Person p1
join Person as p2
on 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