SQL Server SQL对冗余数据的删除重复记录只保留单条的说明
2022-11-12 09:55:01
内容摘要
这篇文章主要为大家详细介绍了SQL Server SQL对冗余数据的删除重复记录只保留单条的说明,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
文章正文
这篇文章主要为大家详细介绍了SQL Server SQL对冗余数据的删除重复记录只保留单条的说明,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
我们先看一下相关数据结构的知识。在学习线性表的时候,曾有这样一个例题。已知一个存储整数的顺序表La,试构造顺序表Lb,要求顺序表Lb中只包含顺序表La中所有值不相同的数据元素。算法思路:先把顺序表La的第一个元素付给顺序表Lb,然后从顺序表La的第2个元素起,每一个元素与顺序表Lb中的每一个元素进行比较,如果不相同,则把该元素附加到顺序表Lb的末尾。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <code> public SeqList<int> Purge(SeqList<int> La) { SeqList<int> Lb = new SeqList<int>(La.Maxsize); //将a表中的第1个数据元素赋给b表 Lb.Append(La[0]); //依次处理a表中的数据元素 for (int i = 1; i <= La.GetLength() - 1; ++i) { int j = 0; //查看b表中有无与a表中相同的数据元素 for (j = 0; j <= Lb.GetLength() - 1; ++j) { //有相同的数据元素 if (La[i].CompareTo(Lb[j]) == 0) { break ; } } //没有相同的数据元素,将a表中的数据元素附加到b表的末尾。 if (j > Lb.GetLength() - 1) { Lb.Append(La[i]); } return Lb; } } </code> |
代码如下:
1 2 3 4 5 6 | <code> select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <code> select * from test;select * from test group by id having count (*)>1select * from test group by idselect distinct * from testdelete from test a where a.rowid!=(select max(rowid) from test b where a.id=b.id);扯远了,回到原来的问题,除了采用数据结构的思想来处理,因为数据库特有的事务处理,能够把数据缓存在线程池里,这样也相当于临时表的功能,所以,我们还可以用游标来解决删除重复记录的问题。 declare @max int, @id int declare cur_rows cursor local for select id , count (*) from test group by id 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 test where id = @id fetch cur_rows into @id ,@max end close cur_rows set rowcount 0 以上是闪电查阅一些资料写出的想法,有考虑不周的地方,欢迎大家指出。 </code> |
注:关于SQL Server SQL对冗余数据的删除重复记录只保留单条的说明的内容就先介绍到这里,更多相关文章的可以留意
代码注释