题解 | #删除emp_no重复的记录,只保留最小的id对应的记录。#

删除emp_no重复的记录,只保留最小的id对应的记录。

http://www.nowcoder.com/practice/3d92551a6f6d4f1ebde272d20872cf05

首先确定思路:

1、以emp_no分组,找到每组最小的id
2、删除不是最小id的数据
第1步代码如下:
select min(id) 
from titles_test
group by emp_no
第2步第一直觉应该是
delete from titles_test
where id not in (
    select min(id) 
    from titles_test
    group by emp_no) 
);

无法通过的原因

但这样无法通过测试,原因前面大佬有解释:

mysql不允许在子查询的同时删除原表数据

正确的方法

把从原始表中查询出来的id作为一个临时表(test),再把从临时表中取出来的id作为条件,在原始表里删数据。

具体代码如下:
delete from titles_test
where id not in (
    select * from ( 
        select min(id) 
        from titles_test
        group by emp_no) test
);




全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗? 刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
qz鹿:*** 祝他毕业就失业
点赞 评论 收藏
分享
评论
6
1
分享
牛客网
牛客企业服务