我需要两列(X和Y)的值的组合是唯一的,但只有当第三列('STATUS')具有特定值时。如果第三列具有与前两列不同的值,则允许重复。
所有3列都不可为空。
我试过了,但没有用:
CREATE UNIQUE INDEX MY_UK ON MY_TABLE(X, Y, (CASE WHEN STATUS = 'ACTIVE' THEN STATUS ELSE NULL END));
字符串
它抱怨重复的值肯定不存在于STATUS = 'ACTIVE'的记录中,我猜是'NOT_ACTIVE' STATUS或其他什么冲突。有人知道解决方案吗?
2条答案
按热度按时间du7egjpx1#
像这样的,也许?
样品表:
字符串
Index * 将 *
x
和y
用一个在这两列中都不存在的字符连接起来。为什么?这样我们就可以避免误报;例如,12||3
等于1||23
,我们想避免这种情况:型
测试:
该行尚不存在,因此应该允许:
型
这一个也是一样-不存在,可以插入:
型
这样的行已经存在,因此您无法插入它:
型
值类似于前一个插入(
x
和y
存在于表中,但状态现在已更改,因此可以插入行):型
gc0ot86w2#
2个选项(一个基于@Littlefoot的答案):
唯一索引:
字符串
具有正常唯一约束的虚拟列:
型