【问题标题】:Create conditional unique constraints on multiple columns在多列上创建条件唯一约束
【发布时间】:2019-06-05 04:38:32
【问题描述】:

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

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

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

alter table <table_name> add constraint <constraint_name> unique (<column_1>, <column_2>, a = 1);

当我运行这个 alter 语句时出现这个错误:

ORA-00907: missing right parenthesis

【问题讨论】:

  • 据我所知,这不会按您的计划进行。也许使用数据库触发器强制执行它。不过,你没有说如果a <> 1。一些显示有效和无效行的示例数据可能会帮助您。
  • 正如 littlefoot 所说。如果a 也是一个字段,你不能在约束中这样做。
  • a 是同一个表中的一列。如果不能做到这一点,那我还能怎么做呢?也许unique indexcase statements
  • 你的要求不清楚,我不知道你想达到什么,但你可以将a = 1替换为case when a = 1 then 1 else 0 endcase when a = 1 then 1 end。第一个版本只允许一条记录 a=1 和一条记录 a1,第二个版本限制较少 - 只允许一条记录 a=1 和多条记录 a1。
  • @krokodilko 请看下面的答案,让我知道你的想法?

标签: sql oracle constraints unique


【解决方案1】:

我相信这就足够了:

create unique index <index_name> on <table_name> (case when a = 1 then <column_1> end, 
                                                  case when a = 1 then <column_2> end); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多