Given this data set,
ID COLUMN1 COLUMN2 COLUMN3
1 123 doc1 14 --> This is good
2 123 doc1 15 --> This is good
3 123 doc1 12 --> This is good
4 123 doc2 12 --> This is good
5 123 doc1 10 --> This is good
6 123 doc1 11 --> This is good
7 123 doc2 11 --> This is good
7 123 doc2 16 --> This is good
8 123 doc1 11 --> This record must raised an error when inserting because there is a row (ID 6) with same value in COLUMN1 and COLUMN2 and value 11 in COLUMN3.
9 123 doc1 14 --> This record must raised an error when inserting because there is a row (ID 1) with same value in COLUMN1 and COLUMN2 and value 14 in COLUMN3.
10 123 doc1 15 --> This record must raised an error when inserting because there is a row (ID 2) with same value in COLUMN1 and COLUMN2 and value 15 in COLUMN3.
so when you say this
1. There can be two records with same values in COLUMN1, COLUMN2 and if COLUMN3 NOT IN (11,14,15). then id=2 cannot be good, since it got column3=15 so its column1 and column2 duplicates with the row id=1.
simillary id=6 cannot be good, since it got column3=11 so its column1 and column2 duplicates with the row id=1.
demo@XEPDB1> create table t ( id int, column1 int, column2 varchar2(10), column3 int );
demo@XEPDB1> create unique index t_idx on t(
2 case when column3 in (11,14,15) then column1 end,
3 case when column3 in (11,14,15) then column2 end ) ;
demo@XEPDB1> insert into t(id,column1,column2,column3) values(1,123,'doc1',14);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(2,123,'doc1',15);
insert into t(id,column1,column2,column3) values(2,123,'doc1',15)
*
ERROR at line 1:
ORA-00001: unique constraint (DEMO.T_IDX) violated
demo@XEPDB1> insert into t(id,column1,column2,column3) values(3,123,'doc1',12);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(4,123,'doc2',12);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(5,123,'doc1',10);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(6,123,'doc1',11);
insert into t(id,column1,column2,column3) values(6,123,'doc1',11)
*
ERROR at line 1:
ORA-00001: unique constraint (DEMO.T_IDX) violated
demo@XEPDB1> insert into t(id,column1,column2,column3) values(7,123,'doc2',11);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(8,123,'doc2',16);
demo@XEPDB1> insert into t(id,column1,column2,column3) values(9,123,'doc1',11);
insert into t(id,column1,column2,column3) values(9,123,'doc1',11)
*
ERROR at line 1:
ORA-00001: unique constraint (DEMO.T_IDX) violated
demo@XEPDB1> insert into t(id,column1,column2,column3) values(10,123,'doc1',14);
insert into t(id,column1,column2,column3) values(10,123,'doc1',14)
*
ERROR at line 1:
ORA-00001: unique constraint (DEMO.T_IDX) violated
demo@XEPDB1> insert into t(id,column1,column2,column3) values(11,123,'doc1',15);
insert into t(id,column1,column2,column3) values(11,123,'doc1',15)
*
ERROR at line 1:
ORA-00001: unique constraint (DEMO.T_IDX) violated
demo@XEPDB1> commit;
demo@XEPDB1> select * from t order by id ;
ID COLUMN1 COLUMN2 COLUMN3
---------- ---------- ---------- ----------
1 123 doc1 14
3 123 doc1 12
4 123 doc2 12
5 123 doc1 10
7 123 doc2 11
8 123 doc2 16
demo@XEPDB1>