使用Oracle,如果列值可以为"是"或"否",是否可以约束表,以便只有一行可以具有"是"值?
我宁愿重新设计表结构,但这是不可能的.
[UDPATE]遗憾的是,此表中不允许使用空值.
使用基于函数的索引:
create unique index only_one_yes on mytable (case when col='YES' then 'YES' end);
Oracle仅索引不完全为null的键,此处的CASE表达式确保所有"NO"值都更改为空值,因此不会编入索引.
这是一个kludgy hack,但如果列允许NULL,那么你可以使用NULL代替"NO"并像以前一样使用"YES".对该列应用唯一键约束,您将永远不会得到两个"YES"值,但仍然有很多NO.
更新:@Nick Pierpoint:建议添加一个检查约束,以便将列值限制为"YES"和NULL.语法在他的回答中得到了解决.