| 導購 | 订阅 | 在线投稿
分享
 
 
 

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

來源:互聯網  2008-05-31 22:07:56  評論

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

  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;         A     B     C    ---------- ---------- ----------         1     2     3         2     3     4         3     4     5         4     5     6         1     2     3         2     3     4     已選擇6行。 SQL create table exceptions(row_id rowid,     2 owner varchar2(30),  3 table_name varchar2(30),     4 constraint varchar2(30));     表已創建。     SQL SQL alter table t add constraint t_unique     2 unique(a,b,c) exceptions into exceptions;    alter table t add constraint t_unique                   * ERROR 位于第 1 行: ORA-02299: 無法驗證 (EPUSER.T_UNIQUE) - 未找到重複要害字     SQL create table dups     2 as select *from t where rowid in (select row_id from exceptions);     表已創建。     SQL select *from dups;         A     B     C    ---------- ---------- ----------         1     2     3         2     3     4         1     2     3         2     3     4     SQL select row_id from exceptions;     ROW_ID    ------------------    AAAIEJAAKAAAyMSAAA    AAAIEJAAKAAAyMSAAE    AAAIEJAAKAAAyMSAAB    AAAIEJAAKAAAyMSAAF     SQL delete from t where rowid in ( select row_id  2 from exceptions );     已刪除4行。     SQL insert into t select distinct * from dups;     已創建2行。     SQL SQL commit;     提交完成。     SQL select *from t;         A     B     C    ---------- ---------- ----------         3     4     5         4     5     6         1     2     3         2     3     4
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有