lintcode-1922 · 删除重复的姓名
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述编写一个 SQL 语句,来删除 contacts 表中所有重复的姓名,重复的姓名里只保留 id 最小的那个。表定义: contacts (联络表)列...
大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!
描述
编写一个 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)