2017-03-03 87 views
0

我想將UNIQUE約束放在2列colA和colB上。一旦限制被設置它將確保可樂COLB值的該組合是獨一無二的,具有不可互換值的多列的唯一約束

還應該確保,例如,

對於在表中的行,如果可口可樂值是100 & colB值爲101,那麼對於該表中的任何其他行,colA值不能爲101,colB值不能爲100。

請建議。

問候, 薩欽

+0

強制執行(通過'CHECK')colA'總是小於'colB'嗎? –

+0

不,不是colA總是小於colB的情況。對於表中的任何ID,colA和colB的值不能互換。如果您需要進一步解釋,請告訴我。儘管CHECK約束的解決方案應該是可以接受的。 –

回答

1

Checkunique index

create table uni(colA number, colB number); 

    ALTER TABLE uni ADD CONSTRAINT constraint_name check(cola != colb); 

    create unique index uni_idx on uni( LEAST(cola , colb),GREATEST(cola , colb)); 

insert into uni values (100,101); (OK) 
into uni values (100,102); (OK) 
into uni values (101,100); (error) 
into uni values (100,100); (error) 
+0

是的你是對的,我忘記從索引 –

+0

中刪除'||'我將如何檢查WHERE子句中該索引的有效性?我的意思是,SELECT * FROM uni WHERE LEAST(可樂,科爾布)= GREATEST(可樂,科爾布)?或者像這樣的其他一些代碼? –

+0

但你爲什麼要檢查它?做插入和處理兩個例外('ORA-02290,ORA-00001') –