在已有冗余的表上加唯一约束

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

SELECT * FROM emp a

WHERE rowid ANY

(SELECT rowid FROM emp b

WHERE a.ename = b.ename

)

可以找到冗余的数据

今个发现还有一个比较简便的方法,如下使用 exceptions into exceptions;

SQL create table t ( a int, b int, c int );

表已创建。

SQL insert into t select rownum,rownum+1,rownum+2 from all_objects where rownum<5;

已创建4行。

SQL insert into t select *from t where rownum<3;

已创建2行。

SQL commit;

提交完成。

SQL select *from t;

ABC

---------- ---------- ----------

123

234

345

456

123

234

已选择6行。SQL create table exceptions(row_id rowid,

2owner varchar2(30),3table_name varchar2(30),

4constraint varchar2(30));

表已创建。

SQLSQL alter table t add constraint t_unique

2unique(a,b,c) exceptions into exceptions;

alter table t add constraint t_unique

*ERROR 位于第 1 行:ORA-02299: 无法验证 (EPUSER.T_UNIQUE) - 未找到重复要害字

SQL create table dups

2as select *from t where rowid in (select row_id from exceptions);

表已创建。

SQL select *from dups;

ABC

---------- ---------- ----------

123

234

123

234

SQL select row_id from exceptions;

ROW_ID

------------------

AAAIEJAAKAAAyMSAAA

AAAIEJAAKAAAyMSAAE

AAAIEJAAKAAAyMSAAB

AAAIEJAAKAAAyMSAAF

SQL delete from t where rowid in ( select row_id2from exceptions );

已删除4行。

SQL insert into t select distinct * from dups;

已创建2行。

SQLSQL commit;

提交完成。

SQL select *from t;

ABC

---------- ---------- ----------

345

456

123

234

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航