删除重复数据
从局部字段删除重复数据
1。查询重复的数据
选择字段1,字段2,从字段名称1(字段2)计数(*),计数为(*)> 1
例如:选择所有者从dba_tables组所有者拥有数(*)> 1;
选择所有者从dba_tables组所有者拥有数(= 1×); / /没有重复数据的查询
2。删除重复数据
从表名A删除字段1,字段2(选择字段1,字段2,从字段1的表名组计数(*),字段2有计数(*)> 1)
这种删除的效率非常低,对于大量的数据,数据库可能会被挂起。
另一个有效的方法是先将查询的重复数据插入临时表,然后删除它。
创建表临时表
(
选择字段1,字段2,计数(*)为row_num
从表名
按字段分组1,字段2
计数(*)> 1
);
上面的句子是设置一个临时表,并插入查询中的数据。
可以做以下操作:
从表名删除
字段1,字段2(从临时表中选择字段1,字段2);
三.在重复数据中保存最新记录
在Oracle中,rowid是一个隐藏字段,用于标识每个记录的唯一性。所以,只要保持一个在重复数据的rowid最大记录。 U3000 U3000
查询重复数据:
选择a.rowid,A.从表名称
在a.rowid!=(
选择最大(b.rowid)从表名B
字段1 =字段1和字段2 =字段2);
例如:选择一个从dba_tables
在a.rowid!=(
选择最大(rowid)从测试B
在a.owner = b.owner);
删除重复数据,只保存最新数据:
从表名删除
在a.rowid!=(
选择最大(b.rowid)从表名B
字段1 =字段1和字段2 =字段2)。
使用临时表的有效查询
创建表临时表
(选择A 1,A 2,max(a.rowid)作为dataId正式表
按A组分组,字段1,A字段2);
从表名删除
在a.rowid!=
(选择b.dataid从临时表B
字段1 = B字段1和
字段2 =字段2);
承诺;
两。完全删除重复记录
对于表中的两行完全相同,在删除重复数据之后,可以使用以下语句获得记录:
从表名中选择鲜明的*
您可以将查询记录放在临时表中,然后删除原始表记录,然后将临时表的数据返回到原始表:
创建表临时表作为(从表名中选择*);
下拉表形式表;
插入到正式表中(从临时表中选择*);
表中删除临时表;如果要从表中删除重复数据,可以先创建一个临时表,删除重复数据的临时表后,导入数据,然后将数据导入正式表从临时表,如下:插入t_table_bak。
选择不同的t_table;