Oracle、SQLServer 删除表中的重复数据,只保留一条记录

概述:首先,查找表中多余的重复记录,重复记录是根据单个字段(FIELD_CODE)来判断以上是为你收集整理的Oracle、SQLServer 删除表中的重复数据,只保留一条记录全部内容

Oracle、SQLServer 删除表中的重复数据,只保留一条记录

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

****************Oracle 删除表中的重复数据****************

一、重复记录根据单个字段来判断

1、首先,查找表中多余的重复记录,重复记录是根据单个字段(FIELD_CODE)来判断

select * from R_RESOURCE_DETAILS where FIELD_CODE in
(select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_CODE having count(FIELD_CODE) 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(FIELD_CODE)来判断,只留有rowid最小的记录

delete from R_RESOURCE_DETAILS where (FIELD_CODE) in 
(select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_CODE having count(FIELD_CODE) 1) 
and rowid not in (select min(rowid) from R_RESOURCE_DETAILS group by FIELD_CODE having count(*)1)

二、重复记录根据多个字段来判断

1、查找表中多余的重复记录(多个字段)

select * from R_RESOURCE_DETAILS a where (a.FIELD_CODE,a.DTA_ITEM_NAME) in
(select FIELD_CODE,DTA_ITEM_NAME from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*)  1)

2、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from R_RESOURCE_DETAILS a where (a.FIELD_CODE,a.DTA_ITEM_NAME) in 
(select FIELD_CODE,DTA_ITEM_NAME having count(*)  1) 
and 
rowid not in (select min(rowid) from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*)1)

3、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from R_RESOURCE_DETAILS a 
where (a.FIELD_CODE,DTA_ITEM_NAME having count(*)1)

****************sqlServer 删除表中的重复数据****************

1、查询表中Name 重复的数据

2、有唯一列,通过唯一列最大或最小方式删除重复记录

3、无唯一列使用ROW_NUMBER()函数删除重复记录

1、查询表中Name 重复的数据

select Name from Student group by  Name having count(Name)  1

2、有唯一列,通过唯一列最大或最小方式删除重复记录

检查表中是否有主键或者唯一值的列,当前可以数据看到ID是唯一的,可以通过Name分组排除掉ID最大或最小的行

delete from Student
  where Name in( select Name from Student group by  Name having count(Name)  1) and 
 ID not in(select  max(ID) from Student group by  Name having count(Name)  1 )

执行删除脚本后查询

3、无唯一列使用ROW_NUMBER()函数删除重复记录

如果表中没有唯一值的列,可以通过 来删除重复数据

重复执行插入脚本,查看表数据,表中没有唯一列值

Delete T From
 (Select Row_Number() Over(Partition By [Name] order By [ID]) As RowNumber,* From Student)T
 Where T.RowNumber  1

小知识点

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

表示根据COLUMN分组,在分组内部根据 COLUMN排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

函数“Row_Number”必须有 OVER 子句。OVER 子句必须有包含 ORDER BY

Row_Number() Over(Partition By [Name] order By [ID]) 表示已name列分组,在每组内以ID列进行升序排序,每组内返回一个唯一的序号

执行删除脚本后查询表数据

总结

以上是为你收集整理的Oracle、SQLServer 删除表中的重复数据,只保留一条记录全部内容,希望文章能够帮你解决Oracle、SQLServer 删除表中的重复数据,只保留一条记录所遇到的程序开发问题。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论