`
屌丝学Java
  • 浏览: 29863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle查询重复数据和删除重复记录示例分享

 
阅读更多
一、查询某个字段重复


代码如下:

      select *
          from User u
         where u.user_name in (select u.user_name 
                                 from User u
                                group by u.user_name   having count(*) > 1)



二,删除表中某几个字段的重复

例:表中有条六条记录。   其中张三和王五   的记录有重复
TableA


代码如下:

id customer PhoneNo 
001 张三 777777 
002 李四 444444 
003 王五 555555 
004 张三 777777 
005 张三 777777 
006 王五 555555 
如何写一个sql语句将TableA变成如下 
001 张三 777777 
002 李四 444444 
003 王五 555555



测试环境



代码如下:

create table TableA ( id varchar(3),customer varchar(5),PhoneNo varchar(6)) 
insert into TableA select '001','张三','777777' 
union all select '002','李四','444444' 
union all select '003','王五','555555' 
union all select '004','张三','777777' 
union all select '005','张三','777777' 
union all select '006','王五','555555'





结果



代码如下:

 delete TableA from TableA Twhere

exists( 
select 1fromtablea where customer=T.customer and phoneno=T.phoneno 
andid < tt.id
)





总结

该方法适用于有一个字段为自增性,例如本例中的:id

代码如下:

 delete 表名 from 表名 as Twhere

exists( 
select 1from表名 where 字段A=T.字段A and 字段B=T.字段B,(....) 
and自增列 < T.自增列
)





三,查询并删除重复记录的SQL语句

查询及删除重复记录的SQL语句

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


代码如下:

 select * from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 




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


代码如下:

 delete from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 



注:rowid为oracle自带不用该.....

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

代码如下:

 
select * from vitae a 
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 



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

代码如下:

 delete from vitae a 
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 




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


代码如下:

 
select * from vitae a 
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 



(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;


代码如下:

 Select Name,Count(*) From A Group By Name Having Count(*) > 1 



如果还查性别也相同大则如下:

代码如下:

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1 





(三)

方法一

代码如下:

declare @max integer,@id integer 
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1 
open cur_rows 
fetch cur_rows into @id,@max 
while @@fetch_status=0 
begin 
select @max = @max -1 
set rowcount @max 
delete from 表名 where 主字段 = @id 
fetch cur_rows into @id,@max 
end 
close cur_rows 




set rowcount 0 方法二
"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除


代码如下:

select distinct * into #Tmp from tableName 
drop table tableName 
select * into tableName from #Tmp 
drop table #Tmp 



发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

代码如下:

select identity(int,1,1) as autoID, * into #Tmp from tableName 
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID 
select * from #Tmp where autoID in(select autoID from #tmp2) 


最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)
查询重复

代码如下:

select * from tablename where id in ( 
select id from tablename 
group by id 
having count(id) > 1 
)
分享到:
评论

相关推荐

    Oracle查询重复数据与删除重复记录方法(txt)

    ### Oracle查询重复数据与删除重复记录方法 在Oracle数据库中,有时我们需要找出并处理重复的数据。这不仅可以提高数据质量,还能提升查询效率。本文将详细介绍几种常用的查询和删除Oracle数据库中重复记录的方法。...

    Oracle查询重复数据与删除重复记录方法

    ### Oracle查询重复数据与删除重复记录方法 #### 一、查询重复数据 ##### 1. 使用ROWID方法 ROWID是Oracle中一个特殊的数据类型,它代表了表中每一条记录在物理存储上的唯一地址。利用ROWID可以非常高效地查询和...

    ORACLE去除重复数据方法

    本文介绍了两种在Oracle数据库中去除重复数据的方法:一是通过子查询实现,二是利用窗口函数`ROW_NUMBER()`。这两种方法各有优劣: - **子查询方法**适用于大多数Oracle版本,但可能不够直观,尤其是在处理复杂数据...

    Oracle删除表中的重复数据

    本文将详细解析如何在Oracle中删除表中的重复数据,同时确保不损害和修改原表的其他数据。 ### Oracle删除表中的重复数据方法 在Oracle中删除表中的重复数据,可以采用多种策略,但通常涉及创建一个临时表来保存...

    oracle中如何删除重复的记录

    要删除Oracle数据库表中的重复记录,有几种方法可以采用: ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到...

    如何高效删除Oracle数据库中的重复数据

    ### 如何高效删除Oracle...总之,高效删除Oracle数据库中的重复数据不仅可以节省存储空间、提高查询效率,还可以保证数据的准确性和一致性。通过上述方法和技术,您可以有效地管理和维护Oracle数据库中的数据质量。

    Oracle数据库删除表中重复记录的方法三则.txt

    ### Oracle数据库删除表中重复记录的方法 在Oracle数据库管理中,经常会遇到需要处理表中的重复数据的情况。重复数据不仅会占用不必要的存储空间,还可能导致数据统计错误或业务逻辑混乱等问题。因此,掌握如何有效...

    Oracle查询表里的重复数据方法

    本篇文章将详细介绍如何在Oracle中查询和删除重复数据。 首先,我们要明确什么是重复数据。在一个表中,如果某些字段的值相同,且这些字段被视为识别记录的关键字段,那么这些记录就被认为是重复的。例如,`person`...

    oracle删除重复记录

    在Oracle数据库管理中,处理数据冗余是一项非常重要的工作,特别是在大数据量的环境中,重复记录不仅浪费存储空间,还可能导致数据分析结果出现偏差。本文将详细介绍如何在Oracle数据库中有效地删除表内的重复记录。...

    Oracle重复数据清理

    总结来说,Oracle重复数据的清理是数据库管理和维护的重要组成部分。通过上述的知识点,我们可以知道清理重复数据不仅需要识别这些数据,还要在不影响数据完整性的情况下安全地进行删除或备份。这通常需要结合使用...

    删除数据表中重复记录

    通过上述方法,可以在MySQL、SQL Server、Oracle等多种数据库管理系统中有效地删除数据表中的重复记录。需要注意的是,在实际操作前最好对数据进行备份,以防误删重要的数据。此外,根据数据库的不同版本和特性,...

    查询和删除表中重复数据

    本文介绍了查询和删除表中重复数据的几种常用方法。对于查询部分,我们可以通过 `ROWID`、`GROUP BY` 和 `DISTINCT` 来实现;对于删除部分,可以基于单个字段或者多个字段的组合来进行。这些方法适用于不同的数据库...

    oracle去重复

    在Oracle数据库中,去除重复数据是一项常见的需求,特别是在处理大量数据时,为了确保数据准确性和一致性,去除重复记录至关重要。本文将详细介绍如何利用`ROW_NUMBER()`函数来有效地去除Oracle中的重复数据。 ####...

    在oracle查询删除一个表编码中相同的记录

    这个SQL语句分为两部分:查询和删除重复记录。 - **查询部分**: - 首先,它使用 `GROUP BY` 子句按 `STEEL_GRADE_ID` 分组,并统计每个分组中记录的数量。 - 然后,它使用 `HAVING COUNT(*) &gt; 1` 来筛选出重复的...

    Delphi自动删除数据库中重复记录..rar

    这个示例中的 `RemoveDuplicates` 函数接受一个 TDataSet 类型的参数,遍历数据集并删除重复记录。请注意,实际使用时,应考虑事务处理以确保数据一致性,同时可能需要添加错误处理机制来处理可能出现的异常。 ...

    最高效的删除重复记录方法

    本文将详细介绍一种高效的方法来删除Oracle数据库中的重复记录,并通过具体的SQL语句示例来帮助读者理解和掌握这种方法。 #### 一、问题背景与目标 在处理大量数据时,重复记录的存在可能会导致数据统计错误、分析...

    oracle查询效率

    7. **删除重复记录**:使用ROWID进行删除操作,如示例所示,可以高效地去除重复记录。 8. **用TRUNCATE替代DELETE**:当需要删除整张表时,TRUNCATE比DELETE更快,因为它不涉及回滚段,不支持撤销操作,因此资源...

Global site tag (gtag.js) - Google Analytics