sql - Postgres : one boolean true all other false check constraint?

标签 sql postgresql

我正在使用 Postgres 并且我有一个包含几列 bool 类型的表。
c1,c2,c3,c4 是列 (BOOLEAN)。

在我的模型中,我必须有其中之一,并且只有一个设置为 true。其他三个一定是假的。

我在表的其他列上添加了类似的检查(针对 null,而不是 bool)案例,如下所示:

ADD CONSTRAINT only_one_name_not_null CHECK (num_nonnulls(n1, n2, n3, n4) = 1)

我还没有找到做同样事情的解决方案,但使用 bool 类型。

有没有办法强制一个 bool 值为真,其他为假?

最佳答案

您可以转换为数字和计数:

check (( n1::int) + (n2::int) + (n3::int) + (n4::int) = 1)

注意:这假设值不是 NULL .如果 NULL 可以使用类似的逻辑s 是允许的。他们大概会被视为虚假的。

关于sql - Postgres : one boolean true all other false check constraint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61839577/

相关文章:

sql - 将 LEFT 函数与 LEN 函数一起使用

mysql - 根据产品表中的产品数量统计消费者数量

java - Hibernate 看不到名称中带有引号的表

sql - 在两列上创建索引以检查日期是否介于这两个列之间

mysql - 如何寻找最小免费值(value)

mysql - 选择 IF 查询

performance - J2EE - PostgreSQL - JDBC - 慢速查询

sql - 对多个表执行查询

postgresql - 时间被存储在没有时区的 postgres 数据库中,即使我提供它们来 Sequelize

mysql - 获取起始日期和截止日期内的年份数据