一、完整建表 SQLMySQL 语法CREATE TABLE Person( id INT PRIMARY KEY, email VARCHAR(40) ); id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。INSERT INTO Person(id, email) VALUES (1, johnexample.com), (2, bobexample.com), (3, johnexample.com);二、需求编写解决方案删除所有重复的电子邮件只保留一个具有最小id的唯一电子邮件。对于 SQL 用户请注意你应该编写一个DELETE语句而不是SELECT语句。对于 Pandas 用户请注意你应该直接修改Person表。运行脚本后显示的答案是Person表。驱动程序将首先编译并运行您的代码片段然后再显示Person表。Person表的最终顺序无关紧要。返回结果格式如下示例所示三、 思路与解题方案 1联表删除推荐本题首选DELETE p1 FROM Person p1 JOIN Person p2 ON p1.email p2.email AND p1.id p2.id;优点代码简短逻辑直观p1.idp2.id代表删掉更大 id 保留最小的那个。方案 2子查询过滤DELETE FROM Person WHERE id NOT IN ( SELECT min_id FROM (SELECT MIN(id) min_id FROM Person GROUP BY email) t );易错坑90% 新手踩坑 DELETE FROM Person WHERE id NOT IN (SELECT MIN(id) FROM Person GROUP BY email);You cant specify target table Person for update in FROM clause原因MySQL 不允许在同一语句中既删除这张表又直接查询这张表必须嵌套一层派生表四、总结去重保留最小主键优先用联表DELETE JOIN写法使用NOT IN方案必须嵌套一层子查询规避 MySQL 语法限制Leet‑Code 这道题属于简单题但是很多同学只会写 SELECT 查询不会写 DELETE 删除语句面试很容易失分