微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

非唯一约束

如何解决非唯一约束

所以,我遇到了这种情况: 我创建了一个表(假设为model_a),在该表中,我有2个列(假设为col1col2)。 我需要一个满足这一现实的约束条件:

model_a

col1 | col2
-----+-----
  1  |  1  //first row
  2  |  1  >> ok
  1  |  1  >> ok
  1  |  2  >> can not insert this row

这不是唯一约束,您可以复制第一行。

此约束活动唯一一次是col1是相同的,但col2是不同的。

需要帮助:微笑:非常感谢!

解决方法

我正在考虑两个列的最小/最大值的唯一索引,该索引仅适用于值不相等的行:

create unique index myidx 
    on model_a (least(col1,col2),greatest(col1,col2))
    where (col1 <> col2)

Demo on DB Fiddle

insert into model_a (col1,col2) values (1,1); -- ok
insert into model_a (col1,col2) values (2,1); -- ok

insert into model_a (col1,2);
-- ERROR:  duplicate key value violates unique constraint "myidx"
-- DETAIL:  Key (LEAST(col1,GREATEST(col1,col2))=(1,2) already exists.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。