在这个时候,如果有临时表中的重复数据,无论businessid主键字段有重复,或整行复制,它会报告违反了专属的主键约束误差。

方法:通过XX具有计数组(*)> 1,rowid,鲜明、临时表、程序

1。查询表中的重复数据
重复一个字段

重复多个字段

重复一行

创建测试表:

复制代码代码如下所示:
创建表的CFA(businessid号码,客户VARCHAR2(50),branchcode VARCHAR2(10),data_date VARCHAR2(10));
插入CFA的值(1,艾伯特,'scb ','2011-11-11);
插入CFA的值(2,'andy ','db ','2011-11-12);
插入CFA的值(3,'allen ','hsbc ','2011-11-13);

以下检查重复数据----------------------------------------------
插入CFA的值(1,'alex ','icbc ','2011-11-14);
插入CFA的值(1,艾伯特,'ctbk ','2011-11-15);
插入CFA的值(1,艾伯特,'scb ','2011-11-11);




的情况下,只有businessid重复

复制代码代码如下所示:
SELECT * FROM CFA在businessid在(选择businessid从CFA组);



如果是B的情况下,businessid和名字都在同一时间重复
复制代码代码如下所示:
SELECT * FROM CFA,(businessid,客户)在(选择businessid,客户从CFA);

在C的情况下,重复整个行

参考B的方法:
复制代码代码如下所示:
SELECT * FROM CFA,(businessid,客户,branchcode,data_date)在(选择**,在)。


2。从表中删除重复数据
的情况下,删除表中多余的重复记录,并重复记录是由一个单一的现场判断(businessid),只有最小的rowid记录。

它也可以保持rowid不是最小的记录,你需要改变最小的代码最大不再。

复制代码代码如下所示:
删除从CFA
在那里businessid(选择businessid)
从CFA
集团通过businessid
Having count (businessid) > 1)
和ROWID不(选择min(rowid)
从CFA
集团通过businessid
具有计数(businessid)> 1);


或者,使用更简单高效的语句

复制代码代码如下所示:
删除CFA
如果t.rowid
(选择min(x.rowid)从CFA X在x.businessid = t.businessid);


B的情况下,删除多余的重复记录(多个字段)表中,只有最小的rowid记录

复制代码代码如下所示:
删除从CFA
在(businessid,客户)在(选择businessid,客户)
从CFA
集团的客户businessid,
计数(*)> 1)
和ROWID不(选择min(rowid)
从CFA
集团的客户businessid,
计数(*)> 1);


或者,使用更简单高效的语句

复制代码代码如下所示:
删除CFA
在t.rowid >(选择min(x.rowid))
从CFA X
在x.businessid = t.businessid
和x.customer = t.customer);


在C的情况下,这是一个简单的用例,使用临时表方法。

复制代码代码如下所示:
创建表cfabak选择重复的CFA;

截断表CFA;如果它是表备份的最佳生产

插入CFA SELECT * FROM cfabak;

承诺;