题解 | #删除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
);




全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
6
1
分享
牛客网
牛客企业服务