57 - 删除重复的电子邮箱
题目
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+
Id 是这个表的主键。 例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:
+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+------------------+
解答
Runtime: 850 ms, faster than 33.94% of MySQL online submissions forDelete Duplicate Emails.
Memory Usage: N/A
最初是这样的:
从两张表中间选,就相当于在两张表的行的排列组合当中,选出想要的内容
筛选条件是email相等,因此如果
select * from ...
,那么就会得到去掉2的排列组合两张表
因此这里写select a.* from ...
,意思是从表a里面选中所有,所以结果是
也就是左边的这张表
再从中筛选出a.id > b.id
的结果,也就是a中id为3的选项。把它删掉即可。
那为啥是
delete a from ...
,而不是delete from ...
?
报错了
估计是从两张表中删除内容,mysql就不知道该删除哪张了。
Last updated
Was this helpful?