我有一个包含两行的表:AccountIDPartnerAccountID。我需要防止两列重复。意义,如果条目存在:

| AccountID | PartnerAccountID |
| 1         | 2                |

我需要确保以下内容也不存在:
| AccountID | PartnerAccountID |
| 2         | 1                |

有什么办法可以在约束条件下做到这一点吗?

最佳答案

如果您可以在表达式上创建一个唯一的索引,那就太好了:

create unique index unq_t_AccountID_PartnerAccountID
    on t((case when AccountID < PartnerAccountID then AccountId else PartnerAccountID end),
         (case when AccountID < PartnerAccountID then PartnerAccountIDelse AccountId end)
        );

但是,通过将列创建为计算列,然后创建索引,可以执行几乎相同的操作:
alter table t add minid as (case when AccountID < PartnerAccountID then AccountId else PartnerAccountID end);

alter table t add maxid as (case when AccountID < PartnerAccountID then PartnerAccountIDelse AccountId end);

create unique index unq_t_minid_maxid on t(minid, maxid);

10-07 15:38