美文网首页zhaoyqiu的数据分析进阶之路2.0
D8-leetcode196. 删除重复的电子邮箱(简单)

D8-leetcode196. 删除重复的电子邮箱(简单)

作者: 喝奶茶不加奶茶 | 来源:发表于2020-07-02 16:12 被阅读0次

编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。


例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:



提示:

执行 SQL 之后,输出是整个 Person 表。
使用 delete 语句。
准备数据:

create table Person(
Id int(10) primary key not null,
Email varchar(50));

insert into Person values
(1, "john@example.com"),
(2, "bob@example.com"),
(3, "john@example.com");

先过滤出重复的邮箱

select Id,Email from    Person
group by Email
having count(1)>1;

查询Email的类别

select distinct Email from Person;

调整思路:
思路1:利用左连接

delete a from 
    (Person a left join     Person b on a.Email=b.Email)
    where a.Id>b.Id;

思路2:利用自连接
自连接

select * from Person a ,Person b ;

注意:如果两个表连在一起,用逗号连接,就是笛卡尔乘积
筛选

select * from Person a ,Person b 
where a.Email=b.Email ;
select * from Person a,Person b 
where a.Email=b.Email  and a.id >b.id;

只需要保留a表的信息

select a.* from Person a,Person b 
where a.Email=b.Email  and a.id >b.id;

删除id较大的重复值:

delete a.* from Person a,Person b 
where a.Email=b.Email  and a.id >b.id;

思路二:选取小Id

select min(Id) as Id,Email
from Person
group by Email;

总结:

  • 注意自连接的写法
  • 发散思考,不要死磕一条路
  • 行动&认真&坚持

相关文章

网友评论

    本文标题:D8-leetcode196. 删除重复的电子邮箱(简单)

    本文链接:https://www.haomeiwen.com/subject/wulrqktx.html