当前位置: 首页 > news >正文

【Leetcode】高频SQL基础题--196.删除重复的电子邮箱

【Leetcode】高频SQL基础题–196.删除重复的电子邮箱

要求:编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件。
(对于 SQL 用户,请注意你应该编写一个 DELETE 语句而不是 SELECT 语句。)
(对于 Pandas 用户,请注意你应该直接修改 Person 表。)
运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要 。

解题思路1:
1、使用内部子查询 SELECT MIN(id) FROM Person GROUP BY email返回每个电子邮件的最小id。然后,外部的 DELETE删除不在这个列表中的id。

解题思路2:
1、使用自连接,对于每个电子邮件,如果存在更小的id(p1.id > p2.id),则删除当前id(p1)。
这直接避免了子查询,性能更好。

代码1:

DELETE FROM Person
WHERE id NOT IN (SELECT min_id FROM (SELECT MIN(id) AS min_idFROM PersonGROUP BY email) AS temp
);

注意:
1、为什么子查询外还要再套一层查询?
为了避免MySQL的“同时查询与更新”错误
MySQL不允许在一条DELETE(或UPDATE)语句中,​​同时查询和修改同一张表​​。内层子查询和外层DELETE操作的都是Person表,这就会触发MySQL的这个限制。所以,​​将内层查询的结果包装成一个临时的派生表​​。外层DELETE语句不再直接查询原始表,而是查询这个临时出来的、结果集固定的“表”。
执行逻辑:
1、数据库会先执行最内层的查询 SELECT MIN(id) AS min_id FROM Person GROUP BY email,得到一个包含所有需要保留的最小ID的结果集。
2、然后将这个结果集​​物化​​为一个临时的、只在当前查询中存在的派生表,我们给它起名为 temp_table。
3、接着,外层 SELECT min_id FROM temp_table只是从这个临时表中简单地取出所有 min_id,组成一个最终的ID列表。
4、最后,外层的 DELETE语句根据这个最终的ID列表执行删除操作。

代码2:

DELETE p1 
FROM Person p1, Person p2
WHERE p1.email = p2.email AND p1.id > p2.id;

文章转载自:

http://UQUOCWvH.qddtd.cn
http://AgOLgkwr.qddtd.cn
http://SOIU1oNk.qddtd.cn
http://BafvtAzt.qddtd.cn
http://3JIcmPyW.qddtd.cn
http://pJhQ9yNR.qddtd.cn
http://qSjiWhHv.qddtd.cn
http://m5rUpJIE.qddtd.cn
http://hiu1ubCH.qddtd.cn
http://zrmZJwBg.qddtd.cn
http://I9hLosZK.qddtd.cn
http://TDYr6lSv.qddtd.cn
http://YmrXkWVH.qddtd.cn
http://xzMafqFh.qddtd.cn
http://6Lg2kTM7.qddtd.cn
http://Nyb9TMls.qddtd.cn
http://FKnRkIRd.qddtd.cn
http://cPMMtXCt.qddtd.cn
http://LRY4FByE.qddtd.cn
http://stWcs3Ys.qddtd.cn
http://97D9Li2b.qddtd.cn
http://XYr3AxDR.qddtd.cn
http://GGFfTcvK.qddtd.cn
http://mcZYK7PL.qddtd.cn
http://0Ap42w45.qddtd.cn
http://9oi2m2eJ.qddtd.cn
http://zmuO7xQ0.qddtd.cn
http://uyfGIOw7.qddtd.cn
http://I3PJsyTM.qddtd.cn
http://fIwhvSAk.qddtd.cn
http://www.dtcms.com/a/378965.html

相关文章:

  • SpreadJS V18.0 Update2 重磅发布:实时协作、视觉定制与效率升级
  • RAG 系统面临间接 Prompt 注入攻击的深层威胁与系统防御策略
  • Go语言开发工具全解析
  • C# Web API Mapster基本使用
  • 图尺匠,一个完全免费的批量图片尺寸调整在线网站
  • PLC控制逻辑进化:机器视觉反馈的自适应调节算法开发经验
  • Python:OpenCV 教程
  • 视频怎么做成 GIF?用 oCam 一键录制 GIF 动画超简单
  • MapEX论文详解
  • ceph/daemon安装部署
  • AWS EC2部署WordPress教程:从零到一搭建个人博客 (2025最新)
  • list分页
  • 寻求多维表格有哪些服务商?Teable、飞书、WPS、简道云和Airtable
  • 6-获取磁盘分区信息
  • GRASP 实验室研究 论文解读 | 机器人交互:基于神经网络引导变分推理的快速失配估计
  • 元宇宙与金融创新:虚实融合下的金融服务新形态
  • 【基于协同过滤的校园二手交易平台】
  • Oracle APEX 定型文(快速选取功能)
  • 小说创作中的时间轴体验设计:事序图交互与用户体验优化
  • Liunx执行source /etc/profile 报错, -bash: HISTTIMEFORMAT: readonly variable
  • js的事件循环机制的理解
  • MATLAB基于博弈论-云模型的城市道路塌陷风险评价模型
  • 医保购药平台如何对接互联网医院系统源码?技术难点与解决方案
  • 景观设计师的数字画笔:园林景观设计软件有哪些
  • 配置docker常见问题
  • 华宇TAS应用中间件与瀚高股份两款产品完成兼容互认证
  • 详解 C++11
  • GS1-128 校验码计算方法
  • UnityShader:正反面显示不同颜色
  • c++打包pyd文件给Python使用调用函数