题解 | #删除emp_no重复的记录,只保留最小的id对应的记录。#
删除emp_no重复的记录,只保留最小的id对应的记录。
http://www.nowcoder.com/practice/3d92551a6f6d4f1ebde272d20872cf05
首先确定思路:
1、以emp_no分组,找到每组最小的id2、删除不是最小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 );