sql - 非唯一约束
问题描述
所以,我遇到了这种情况:我创建了一个表(比如说model_a
),在这个表中我有 2 个列(比如说col1
和col2
)。我需要一个满足这一现实的约束:
model_a
col1 | col2
-----+-----
1 | 1 //first row
2 | 1 >> ok
1 | 1 >> ok
1 | 2 >> can not insert this row
这不是 UNIQUE 约束,您可以复制第一行。
该约束激活的唯一一次col1
是相同但col2
不同的。
需要帮助 :smile: 非常感谢!
解决方案
我正在考虑两列的最小/最大值的唯一索引,该索引仅适用于值不相等的行:
create unique index myidx
on model_a (least(col1, col2), greatest(col1, col2))
where (col1 <> col2)
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, col2) values (1, 1); -- ok
insert into model_a (col1, col2) values (1, 2);
-- ERROR: duplicate key value violates unique constraint "myidx"
-- DETAIL: Key (LEAST(col1, col2), GREATEST(col1, col2))=(1, 2) already exists.
推荐阅读
- git - 2个团队的2个主分支的Git Flow
- javascript - 为什么我的函数不能从 ngForm 收集用户输入?
- xamarin - 接收动态链接并导航到所需页面 Xamarin.Form 但 Xamarin.Android 无法正常工作
- c++ - 如何重置传递给类构造函数的值?
- c - 适用于 Apple Silicon 的 GTK+
- mysql - 是否有 sql 代码可以插入到不使用 ID 或日期的特定范围/行间隔中?
- powershell - 为什么不能使用 VariablesToExport 导出 PowerShell 模块中的变量成员?
- python - 如何在pyspark中进行不等式过滤
- avplayer - AVPlayer:从 aac 文件中提取定时元数据
- python - DATA DUPLICADA EN CREACION DE REPORTE AUTOMATICO USANDO OPENPYXL