Print

数据库删除重复语句delete

问:Mysql中的Delete操作
  1. 答: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语句删除重复
  1. 答: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
  2. 答: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
  3. 答: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数据库重复数据删除的几种方法
  1. 答:用这种效率最高的就可以
    比如,某个表要按照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替代

本文来源: https://www.lunwen66.cn/article/8c21b30f726f376d50ddb920.html