当设计表的时候没有建组合字段唯一约束,以后需要增加这一约束时,却发现表里已经有了很多重复记录了。请看看我用的去掉表里组合字段重复的记录方法:假设原始表名为source_table,字段名1为field_name1,字段名2为field_name2。

(当然稍加修改也可以用到三个及以上组合字段重复的情况)

第一步: 生成组合字段重复的临时表source_dup_simplecreate table source_dup_simplenologging pctfree 1 pctused 99 as select field_name1,field_name2,count(0) as num from source_tablegroup by field_name1,field_name2 having count(0)>1;第二步: 生成组合字段重复的主表里完整记录的临时表source_dupcreate table source_dup nologging pctfree 1 pctused 99 as select t1。

* from source_table t1,source_dup_simple t2where t1。field_name1=t2。field_name1 and t1。field_name2=t2。field_name2;第三步: 删去source_dup里的重复记录 --可选择:保留rowid小的记录delete from source_dup a where rowid > (select min(rowid) from source_dup b wherea。

field_name1 = b。field_name1 and a。field_name2=b。field_name2);commit;--可选择:保留rowid大的记录delete from source_dup a where rowid (select min(date_field) from source_dup b wherea。

field_name1 = b。field_name1 and a。field_name2=b。field_name2);

commit;

如果时间字段上有重复,还需要再次根据rowid来删一次

delete from source_dup a where rowid < (

select max(rowid) from source_dup b where

a。

field_name1 = b。field_name1 and a。field_name2=b。field_name2);

commit;

第四步: 删去所有重复组合字段原始表里记录 delete from source_table where field_name1||field_name2 in (select field_name1||field_name2 from source_dup_simple);commit;注意:如果操作一万条以上的记录最好在source_table的field_name1和field_name2字段上建索引。

第五步: 把剩下的没有重复的记录插回原始表 insert into source_table select * from source_dup;commit;。

全部

oracle表中怎么去重复,Oracle里去掉表里组合字段重复的记录步骤是什么呢?相关推荐

  1. oracle表中怎么去重复,oracle去掉表重复数据

    今天在做项目过程中,碰到数据库表存在重复记录,显示的时候需要去掉重复的数据.想了老半天,最终用rank() over (partition by 分组字段 order by 排序字段 顺序) 解决了此 ...

  2. 如何向 Oracle 表中的 Date 字段插入日期及时间

    如何向 Oracle 表中的 Date 字段插入日期及时间  Oracle中与sqlserver 插入日期型数据时,有比较大的区别.sqlserver中,直接把日期型数据用单引号括起来就可以,而Ora ...

  3. oracle找到表的位置,查看Oracle表中的指定记录在数据文件中的位置

    查看Oracle表中的指定记录位置 select rowid,user_id from sshr.xx_user where user_id=3010586 select rowid, dbms_ro ...

  4. 查看Oracle表中的指定记录在数据文件中的位置

    查看Oracle表中的指定记录位置 select rowid,user_id from sshr.xx_user where user_id=3010586 select rowid,        ...

  5. Oracle表中数据小数写到前台是百分数显示

    (Oracle表中数据小数写到前台是百分数显示)Oracle表中数据小数写到前台是百分数显示 下面

  6. 查询oracle表中的字段名和字段类型

    查询oracle表中的字段名和字段类型 SELECT b.column_name column_name --字段名,b.data_type data_type --字段类型,b.data_lengt ...

  7. oracle 字段补充空格,oracle表中某个字段含有字符回车、空格的手动修改方式

    select t.*, t.rowid from TB_SD_STANDARD_CHOOSE_ADVISE t where t.id =323900000 update TB_SD_STANDARD_ ...

  8. oracle如何插入系统时间,如何在Oracle表中插入系统时间

    导读:以下的文章主要是通过实际应用代码的方式来引出向Oracle表中正确插入实际的系统时间的实际操作,希望对大家能够有所帮助. 1.SQL> insert into test values(2, ...

  9. oracle语句中dual什么意思,oracle中dual详解

    oracle中dual详解 基本上oracle引入dual为的就是符合语法 1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的. 2. ...

最新文章

  1. visual studio配置第三方库
  2. 山石网科发布智能下一代防火墙新版本 应对未知威胁
  3. asp.net mvc fckeditor全攻略(补充:Controller中传值的问题)
  4. ActiveMQ入门系列二:入门代码实例(点对点模式)
  5. java 12-3 StringBuffer的添加和删除功能
  6. 【Python】青少年蓝桥杯_每日一题_5.15_打印 99 乘法表
  7. 小米登录协议分析_小米温湿度传感器协议分析
  8. 面试题:移动数组的元素
  9. C++(13)--函数的进阶:内联、传递引用、参数默认值、重载、函数模板
  10. TypeError: only integer scalar arrays can be converted to a scalar index
  11. 12位故去的国家最高科技奖得主:科学寰宇,那些永不陨落的“星”
  12. 写程序实现wireshark的抓包功能
  13. spring mvc 从Controller向页面传数据
  14. cad一键卸载工具叫什么_CAD专用卸载修复工具,一键完全彻底卸载删除CAD软件的专用卸载工具...
  15. AcWing1402. 星空之夜
  16. 【转】现学现用WPS,小技巧大帮助
  17. LaTeX tabular实现垂直居中
  18. 【MobaXterm教程】【公网】利用ipv6远程访问服务器
  19. 辐照度贴图的生成算法分析
  20. 测试飞机高度和速度的软件,测量飞行的高度、速度和方向

热门文章

  1. 如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?
  2. C++ STL: lower_bound 和 upper_bound
  3. ceph bluestore源码分析:C++ 获取线程id
  4. 《UNIX高级环境编程》 -- apue.h
  5. 开源工程系列之讯飞VBOX改装蓝牙5.0(aptX HD)音箱
  6. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
  7. 再谈Spring Boot中的乱码和编码问题
  8. 安装ATi显卡驱动后增加的鼠标右键菜单的清理
  9. 【C++】【七】栈的实现
  10. LAMP 关键数据集锦技术选项参考