数据库删除重复语句delete
2022-11-26阅读(430)
问:Mysql中的Delete操作
- 答:delete操作一般用于删除数据表中的某一行,常见的语法如下:
如果我们不在这条语句后面添加where筛选条件,则视为删除数据表的所有行,这里我们只对这种简单的使用方式加以回顾,并不举例说明。
如果在特定的场景中,需要使用sql语句删除重复的行,那我们应该如何操作呢。这里给出一个具体的例子,例如 Leetcode 196 删除重复的邮箱 中需要我们使用delete命令删除重复的电子邮箱。
首先,需要使用自连接语句筛选出重复的电子邮箱id。
此时,我们将重复的电子邮箱查询出来。
然后,就需要使用delete语句,此时涉及到的是一个多表删除的语句,应该写成如下格式:
我们发现在delete和from之间加入了一个p1,这代表只删除p1表中满足筛选条件的行,而p1代表person,最终就完成了对person表的delete操作。
首先,我们仍然需要筛选出重复的电子邮箱的id。
然后,在person删除对应上述的id。
有一个计费表jifei,其中包含的字段有:phone(8位电话号码)、month(月份)、expense(月消费,费用为0表明该月没有产生费用),请你删除jifei表中所有10月份出现的两条相同记录的其中一条记录。
此题目中需要多个字段重复即删除,所以第一步仍然需要筛选出需要删除的行。
然后使用delete删除重复的行。
上述两个步骤实际上删除的所有重复出现的行,但是题目需要删除10月份重复出现两次的记录,所以还需要内联结一个对月份记录的字段。
问:sql delete语句删除重复
- 答:select distinct * into temptable from tableA
truncate table tableA
insert into tableA select * from temptable
或者
alter table tableA add ID_NEW int identity
go
delete a from tableA a where exists(select 1 from tableA where Name=a.name and ID_NEW>a.ID_NEW)
go
alter table tableA drop column ID_NEW - 答:create proc deletedata
as
;with temp as
(select *,row_number() over(partition by id order by id) as index_ from table)
delete temp where index_<>1
go
-----然后执行下就可以了
exec deletedata - 答:select identity(int,1,1) as pid,* into #temp from aa
delete #temp
where pid not in
(
select max(pid) from #temp group by id
)
delete from aa
insert into aa(id,name)
select ID,name from #temp
--select * from aa
--aa为表
问:Oracle数据库重复数据删除的几种方法
- 答:用这种效率最高的就可以
比如,某个表要按照id和name重复,就算重复数据
delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name);
commit;如果以id,name和grade重复算作重复数据
delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name,grade);
commit;注意:min也可用max替代