lintcode-1922 · 删除重复的姓名

举报
搞前端的半夏 发表于 2022/01/24 23:22:58 2022/01/24
【摘要】 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 描述编写一个 SQL 语句,来删除 contacts 表中所有重复的姓名,重复的姓名里只保留 id 最小的那个。表定义: contacts (联络表)列名类型注释idint unsigned主键namevarchar姓名**使用 delete 语句执行你的 SQL 语句之后,返回的是整个 contacts 表我们会单独验证数据库中的...

描述

编写一个 SQL 语句,来删除 contacts 表中所有重复的姓名,重复的姓名里只保留 id 最小的那个。

表定义: contacts (联络表)

列名 类型 注释
id int unsigned 主键
name varchar 姓名

**

使用 delete 语句
执行你的 SQL 语句之后,返回的是整个 contacts 表
我们会单独验证数据库中的数据是否都被修改为如下的信息。

样例

样例一:

表内容: contacts

id name
1 Song Jiang
2 Lu Junyi
3 Wu Yong
4 Song Jiang
5 Wu Yong
6 Lin Chong

在运行你的 SQL 语句之后,上面的 contacts 表应返回以下几行:

id name
1 Song Jiang
2 Lu Junyi
3 Wu Yong
6 Lin Chong

样例二:

表内容: contacts

id name
1 Song Jiang
2 Lu Junyi
3 Wu Yong
4 Song Jiang

在运行你的 SQL 语句之后,上面的 contacts 表应返回以下几行:

id name
1 Song Jiang
2 Lu Junyi
3 Wu Yong

题解

mysql delete:

DELETE FROM table_name [WHERE Clause]


-   如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
-   你可以在 WHERE 子句中指定任何条件
-   可以在单个表中一次性删除记录。

仔细看本题的要求:重复的姓名里只保留 id 最小的那个,所以这里只要找到最小的id,然后不是最小id的数据直接删除就可以了。因为id是主键,不必担心有重复的id.
思路:首先使用group by 按照姓名分组,然后使用min函数找到最小的id。最后使用delete进行删除。这里使用的not in 来判断是不是最小的id。


delete from contacts
where id not in (
 select *
 from (
     select min(id)
     from contacts
     group by name
 ) 

)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200