首页 / 更多教程 / PL/SQL删除重复记录
PL/SQL删除重复记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PL/SQL删除重复记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2391字,纯文字阅读大概需要4分钟。
内容图文
![PL/SQL删除重复记录](/upload/InfoBanner/zyjiaocheng/458/9a84fb0fe6db4b63a3e60e3f3529a1ea.jpg)
--数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
方法一
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,Address
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
在导入到原数据表之前,我们需要将删除新添加的autoID字段列,保证数据表之间字段结构的一致.
再创建一个中间表Tmp3,将上面最后一部获得的不重复的结果集导入到Tmp3之中.
select * into #Tmp3 from #Tmp where autoID in (select autoID from #Tmp where autoID in(select autoID from #tmp2))
这样,Tmp3中保存的记录集合就是我们所希望得到的不重复的结果集.但由于Tmp3中存在autoID字段,所以我们先删除Tmp3表中该列。
Alter TableName Drop Column autoID
接着我们采取第一种重复的解决方法,将Tmp3中的记录集合导入到我们所需要导入的数据表之中.
select distinct * into #Tmp3 from tableName
drop table tableName
select * into tableName from #Tmp3
drop table #Tmp3
drop table #Tmp2
drop table #Tmp
通过以上步骤,tableName中就是我们想要得到的结果集,不存在重复的记录
本文出自 “孤单” 博客,转载请与作者联系!
PL/SQL删除重复记录
标签:pl/sql删除重复记录
本文系统来源:http://weijun1235.blog.51cto.com/5083880/1693336
内容总结
以上是互联网集市为您收集整理的PL/SQL删除重复记录全部内容,希望文章能够帮你解决PL/SQL删除重复记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。