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

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

來源:互聯網  2008-05-19 08:57:40  評論

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

  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- 王朝網路 版權所有