首页 > 试题广场 >

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

[编程题]删除emp_no重复的记录,只保留最小的id对应的记录。
  • 热度指数:161519 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
删除emp_no重复的记录,只保留最小的id对应的记录。
CREATE TABLE IF NOT EXISTS titles_test (
id int(11) not null primary key,
emp_no int(11) NOT NULL,
title varchar(50) NOT NULL,
from_date date NOT NULL,
to_date date DEFAULT NULL);

insert into titles_test values ('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');

删除后titles_test表为(注:最后会select * from titles_test表来对比结果)
id
emp_no
title
from_date
to_date
1 10001
Senior Engineer
1986-06-26
9999-01-01
2
10002
Staff
1996-08-03
9999-01-01
3 10003
Senior Engineer
1995-12-03
9999-01-01
4 10004
Senior Engineer
1995-12-03
9999-01-01


示例1

输入

drop table if exists titles_test;
CREATE TABLE titles_test (
   id int(11) not null primary key,
   emp_no  int(11) NOT NULL,
   title  varchar(50) NOT NULL,
   from_date  date NOT NULL,
   to_date  date DEFAULT NULL);

insert into titles_test values
('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');

输出

1|10001|Senior Engineer|1986-06-26|9999-01-01
2|10002|Staff|1996-08-03|9999-01-01
3|10003|Senior Engineer|1995-12-03|9999-01-01
4|10004|Senior Engineer|1995-12-03|9999-01-01
头像 高质量搬砖人
发表于 2021-01-31 09:46:50
错误方法) DELETE FROM titles_test WHERE id NOT IN(     SELECT MIN(id)     FROM& 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-09 16:10:34
题目描述:删除emp_no重复的记录,只保留最小的id对应的记录。个人思路:1.找出每个emp_no里对应的最小id。2.删除除1里记录的所有数据。 delete from titles_test where id not in ( select min(id) from title 展开全文
头像 Hello典
发表于 2020-11-23 11:24:21
用下面得大佬得语句再mysql7以上得版本中执行会有报错,mysql不允许在查询的同时删除原表数据,如果向删除,必须给原始数据表取一个别名再删除,查询出结果,给结果取别名之后再删除 delete from titles_test where id not in ( select * from 展开全文
头像 momo_guo
发表于 2020-08-27 03:41:17
delete from titles_testwhere id not in ( select min(id) from titles_test group by emp_no)
头像 Dateron
发表于 2021-06-05 13:24:14
删除行语法 delete from table_name where condition本题答案1.需要注意的点是,用 group by 的时候,select 后必须有分组字段,不然会报错;2.并且删除和查询无法同时进行,所以用 emp_no 分组聚合出 min(id) 后,外层还需要再套一层 se 展开全文
头像 好运连连_等得太辛苦了
发表于 2020-09-06 19:40:40
保留最小的==删除其余数据;注意不可用删除最大的方法(因为重复的数据 可能不止2条)换个思维,当遇到只保留最大的时候,则不可以删除最小的方法delete from titles_testwhere id not in( select min(id) from titles_test 展开全文
头像 归云慕海
发表于 2021-09-01 11:56:03
首先确定思路: 1、以emp_no分组,找到每组最小的id 2、删除不是最小id的数据 第1步代码如下: select min(id) from titles_test group by emp_no 第2步第一直觉应该是 delete from titles_t 展开全文
头像 存咕隆咚。存
发表于 2021-10-09 20:36:14
最近练习用开窗函数写的 where id in ( select A.id from ( select *,rank() over (partition by emp_no order by id) rk from titles_test ) A where A.rk > 1)
头像 牛客552629685号
发表于 2022-02-09 02:23:33
查询所有emp_no重复的emp_no SELECT emp_no FROM titles_test GROUP BY emp_no HAVING COUNT(*) > 1; 删除重复emp_no除了最小id 痛点:https://blog.csdn.net/ 展开全文
头像 待逆鸟
发表于 2020-11-20 11:59:02
1、group by 展示的id是该分组第一次来的数据,所以不需要加MIN()2、delete 中的子查询语句 ,规定 删除的表和查询的表 表明不能相同,所以需要造表 delete from titles_testwhere id not in ( select * from ( 展开全文