表: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| email | varchar |
+-------------+---------+
id 是该表的主键列(具有唯一值的列)。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id
的唯一电子邮件, 请注意你应该编写一个 DELETE 语句而不是 SELECT 语句
运行脚本后,显示的答案是 Person
表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person
表。Person
表的最终顺序 无关紧要 。
返回结果格式如下示例所示。
示例 1:
输入:
Person 表:
+----+------------------+
| id | email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
输出:
+----+------------------+
| id | email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
解释: [email protected]
重复两次。我们保留最小的Id = 1
inner join
,形成笛卡尔积Person p1 inner join Person p2 on p1.email = p2.email
, Person表内联自己, 查询 email 相同的数据where p1.id > p2.id
从 eamil 相同数据中筛选出不是同一条数据, 且 id 大的数据delete p1 from Person p1
指定删除 p1
表中的数据最终代码实现
delete p1 from Person p1 inner join Person p2 on p1.email = p2.email where p1.id > p2.id