我有一个包含两行的表:AccountID
和PartnerAccountID
。我需要防止两列重复。意义,如果条目存在:
| 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);