对数据库中的数据进行管理不外乎CRUD,但在平常的工作中很少涉及到删除记录的时候,因为数据库中的数据获取代价昂贵。但是最近看面试题的时候总是在数据库的试题部分出现用SQL语句删除相同记录的题目,所以看了一下。
创建表
1. 数据库 MySQL
2. 表结构
create table one(
id varchar(32) primary key not null,
a varchar(32),
b varchar(32)
)
3. 添加数据
insert into one(id,a,b) values
('1001','a1','b1'),
('1002','a2','b2'),
('1003','a3','b3'),
('1004','a2','b2'),
('1005','a3','b3')
删除语句
在网上查的时候用一条查询语句
delete from one where id not in (select min(id) from one group by a,b);
这个语句从意思上是对的,但是MySQL试过之后不能执行,会出现一个错误
这个问题只出现在MySQL中,意思是不能在同一语句中先查出数据,再update。
解决方式
创建临时表
create table tmp as select min(id) as col from one group by a,b;
delete from one where id not in (select col from tmp);
drop table tmp;
在Oracle中最上边的一句的删除语句是完全正确的。