Sql 在多列上创建条件唯一约束

Sql 在多列上创建条件唯一约束,sql,oracle,constraints,unique,Sql,Oracle,Constraints,Unique,我需要使用Oracle在多个列上创建一个条件唯一约束,但我没有这样做 下面是我现在拥有的,但它不起作用: 基本上,我的条件唯一约束需要在a=1的条件下处理列的组合 alter table add constraint unique(,a=1) 我在运行此alter语句时出现此错误: ORA-00907:缺少右括号我认为这就足够了: create unique index <index_name> on <table_name> (case when a = 1 then

我需要使用Oracle在多个列上创建一个条件唯一约束,但我没有这样做

下面是我现在拥有的,但它不起作用:

基本上,我的条件唯一约束需要在a=1的条件下处理列的组合

alter table add constraint unique(,a=1)

我在运行此alter语句时出现此错误:


ORA-00907:缺少右括号

我认为这就足够了:

create unique index <index_name> on <table_name> (case when a = 1 then <column_1> end, 
                                                  case when a = 1 then <column_2> end); 
在上创建唯一索引(a=1时结束,
当a=1时,则结束);

据我所知,这不会像你计划的那样奏效。也许可以使用数据库触发器强制执行它。但是,您没有说如果
a1
会怎么样。一些显示有效行和无效行的示例数据可能有助于他人帮助您。如果
a
也是一个字段,则不能在约束中执行该操作。
a
是同一表中的一列。如果不能做到这一点,那么我还能怎么做呢?也许
唯一索引
带有
案例陈述
?我不知道您的要求不明确;I don’我不知道你想要实现什么,但你可以将
a=1
替换为
case,当a=1时,则1,否则0结束
case,当a=1时,则1结束
。第一个版本只允许一条记录a=1和一条记录a1,第二个版本限制较少-只允许一条记录a=1和多条记录a1。@krokodilko请参阅下面的答案,让我知道您的想法?