196. 删除重复的电子邮箱

刚刚那道题是困难也就算了,为什么这道简单题也做了这么久。。。。

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

这道题其实思路很清晰啊,如下,
#找出重复的email
#对于重复的email选出id最小
#删除除了刚刚选出id外其余id的记录

首先前两个要求很好写语句

SELECT MIN(Id) AS Id, Email
FROM Person
GROUP BY Email HAVING COUNT(Email) > 1

这就很简单找出来了重复的那一组,我们应该保留的那条数据
下面删除这组除了该条记录以外的数据即可

首先需要找出该组内除了这条数据以外的数据,我们可以用not in 也可以直接用比它大来表示

SELECT p2.Id
FROM (SELECT MIN(Id) AS Id, Email
      FROM Person
      GROUP BY Email HAVING COUNT(Email) > 1
      ) AS p1
LEFT JOIN Person AS p2
ON p1.Email = p2.Email
WHERE p1.Id < p2.Id

这个技巧应该一目了然了,连接两个一样的表,首先设定同组,其次id大小。
最后其实用in来delete就可以了,但是leetcode的系统说不可以把delete和select放在一起,所以我看题解,是又select一遍……不知道真实场景是怎么样 不过有思路就可以了,最后给出完整的答案

DELETE FROM Person
WHERE Id IN (SELECT a.Id
             FROM(SELECT p2.Id
                  FROM (SELECT MIN(Id) AS Id, Email
                        FROM Person
                        GROUP BY Email HAVING COUNT(Email) > 1
                       ) AS p1
                  LEFT JOIN Person AS p2
                  ON p1.Email = p2.Email
                  WHERE p1.Id < p2.Id) AS a
             )
Foxmail的新旧邮箱关联通常涉及到迁移邮件过程。由于你提到无法通过内置的"导入"功能直接识别旧版本的Foxmail存储路径,你可以尝试以下步骤手动迁移: 1. **备份旧数据**:先确保从固态硬盘上的Foxmail 7.2目录(D:\Foxmail 7.2)复制整个邮件数据库文件,通常是.mdb或.dbx文件。 ```shell copy D:\Foxmail 7.2\*.mdb /destination/your_desired_location/ # 或者如果是.dbx格式 ``` 2. **关闭Foxmail**:在尝试迁移之前,关闭所有正在运行的Foxmail实例以防止数据冲突。 3. **安装新版本**:在新的机械硬盘上安装最新版的Foxmail,并确保其兼容性。 4. **添加新帐户**:在新Foxmail中创建一个新的电子邮件帐户,但不要试图自动检测或导入旧的Foxmail数据。手动输入旧邮件地址和密码。 5. **手动导入邮件**:在新Foxmail的设置中找到“工具”或者“文件”->“导出/导入”,选择“从其他程序导入”,然后选择你在第1步备份的邮件数据库文件。 6. **检查和整理**:导入后,可能需要手动清理重复的邮件,可以在新Foxmail的搜索功能中查找并删除重复项。 请注意,Foxmail的帮助中心建议重新运行旧版本后再导入可能是因为某些特定的配置信息或数据库结构只适用于那个版本。如果以上步骤仍然无法成功,你可能需要查阅Foxmail的帮助文档或联系技术支持以获取更详细的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值