作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道如何将特定的 bool 列限制为仅对表中的特定行子集为真。
在下面的示例中,元组 (id2, 1d3)
具有相同值的行在默认列中应该只有一个为真:
$> SELECT * FROM records WHERE id2 = 2 AND id3 = 3;
$> id | id2 | id3 | name | default
------+-------+-------+--------+---------
1 | 2 | 3 | bob | false
2 | 2 | 3 | jane | false
3 | 2 | 3 | jim | false
4 | 2 | 3 | cory | true
5 | 2 | 3 | alan | false
$> SELECT * FROM records WHERE id2 = 4 AND id3 = 5;
$> id | id2 | id3 | name | default
------+-------+-------+--------+---------
6 | 4 | 5 | bill | false
7 | 4 | 5 | fred | false
8 | 4 | 5 | frank | false
9 | 4 | 5 | dave | true
10 | 4 | 5 | ryan | false
最佳答案
您可以使用部分唯一索引来做到这一点:
create unique index on records (id2, id3) where "default";
请注意,default
是一个保留字,因此对于列名来说是一个非常糟糕的选择。
关于sql - 如何对表施加约束以确保表子集中只有一个 bool 列为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167663/
我是一名优秀的程序员,十分优秀!