zoukankan      html  css  js  c++  java
  • SqlServer 删除重复数据

    一、过滤重复的数据

    1、完全重复的记录

    select distinct 字段1,字段2,字段3 from 数据表  

    2、部分关键字段重复的记录

    /*数据结构:角色档案(角色编码,角色,角色分类编码) 
    功  能:取出指定字段(角色分类编码)为关键字的无重复数据,重复的取第一条 
    说  明:重复记录取最后一条,只需要把min改成max即可 
    */ 
    select * from 角色档案 t where 角色编码 in (select min(角色编码)  from 角色档案 t1 group by t1.角色分类编码)

    二、删除重复记录

    数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置,本例举出删除它的办法。

     

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如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子句中省去此列)

    我的Demo:

    select identity(int,1,1) as autoid,
    [ProductCode] ,[CategoryID]
     into #tmp from dbo.tblProduct
    select min(autoid) as autoid into #tmp2 from #tmp group by ProductCode ,CompanyID
    
    truncate table dbo.tblProduct
    insert into tblProduct( [ProductCode] ,[CategoryID]
    )
    select [ProductCode]  ,[CategoryID]
           from #tmp
     where autoid in(select autoid from #tmp2)
    
     
    
    select count(*) from #tmp
    select count(*) from #tmp2
    drop table #tmp
    drop table #tmp2

     原文:http://fdsazi.blog.51cto.com/1871366/375949/

    作者:dupeng0811
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
    留言:同时 , 如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/dupeng0811/p/Delete_duplicate_data.html
Copyright © 2011-2022 走看看