lintcode-1922 · 删除重复的姓名
【摘要】 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 描述编写一个 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)