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

    第一,数据库中实体重复的解决方法。

    实体重复也就是完全重复:即表中两行记录完全一样的情况。这类数据重复就需要删除一条记录,解决方法比较简单,具体操作如下:

    使用select distinct * from tableName就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。


    第二,数据库中字段重复的解决方法。

    字段重复,这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

    方法一:假设有重复的字段为Name要求得到这个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列,如果要删除库里的重复数据,只要将对应的delectable或drop掉就可以了)。


    方法二:保留重复数据中最新的一条记录,操作方法如下:
    在Oracle中,rowid是隐藏字段,用来唯一标识每条记录。所以,只要保留重复数据中rowid最大的一条记录就可以了。  
    查询重复数据: 
    select a.rowid,a.* from 表名 a 
    where a.rowid != ( 
    select max(b.rowid) from 表名 b 
    where a.字段1 = b.字段1 and a.字段2 = b.字段2 );    
    例:selete from dba_tables a 
    where a.rowid!=( 
    select max(rowid) from test b 
    where a.owner=b.owner);

    方法三:删除重复数据,只保留最新的一条数据,操作方法如下:
    delete from 表名 a 
    where a.rowid != ( 
    select max(b.rowid) from 表名 b 
    where a.字段1 = b.字段1 and a.字段2 = b.字段2 )

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/cp168168/p/7237983.html
Copyright © 2011-2022 走看看