考虑下表:
create table table_1(
id serial
PRIMARY KEY,
col1 varchar(50),
col2 varchar(50),
status varchar(1) -- A=active P=pending D=Deleted
);
现在我想要的是在(col1,col2)上创建一个唯一约束,但它不应该考虑那些status ='D',即考虑表中有2行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'D');
然后我不能添加以下行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
但我应该能够添加以下一行:
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'A');
答案 0 :(得分:1)
您可以使用部分唯一索引执行此操作:
create unique index id_table1_col1_col2_status on table_1(col1, col2, status)
where status <> 'D';
Here是一个SQL小提琴,您可以使用它来查看它是否有效。