首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL数据库系统

SQL数据库系统
EN

Stack Overflow用户
提问于 2018-12-15 14:18:39
回答 2查看 31关注 0票数 0

我的关系中有三个布尔型属性,我希望其中只有一个属性为真,否则表将显示错误。我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2018-12-15 14:39:36

如果您的DBMS支持检查约束(大多数都支持),则可以使用检查约束。在其中,您可以检查其中恰好有一个标志为真。为此,您可以使用布尔表达式。

代码语言:javascript
复制
CREATE TABLE elbat
             (...
              CHECK (flag1 = true
                     AND flag2 = false
                     AND flag3 = false
                      OR flag1 = false
                         AND flag2 = true
                         AND flag3 = false
                       OR flag1 = false
                          AND flag2 = false
                          AND flag3 = true));

(仅供了解,不同的DBMS的语法可能有所不同。)

票数 2
EN

Stack Overflow用户

发布于 2018-12-15 18:06:06

为此,您可以使用check约束。

代码语言:javascript
复制
create table some_table
(
  flag1 boolean not null,
  flag2 boolean not null,
  flag3 boolean not null,
  constraint only_one_true 
      check ( (flag1,flag2,flag3) IN ( (true, false, false), 
                                       (false, true, false),
                                       (false, false, true)) ) 
);

上面是标准的SQL语句。

一些DBMS系统还允许将布尔值转换为表示01数字,在这种情况下,您只需将它们相加,且和必须等于1(确保恰好有一个标志设置为真)

代码语言:javascript
复制
create table some_table
(
  flag1 boolean not null,
  flag2 boolean not null,
  flag3 boolean not null,
  constraint only_one_true 
      check ( cast(flag1 as integer) + 
              cast(flag2 as integer) + 
              cast(flag3 as integer) = 1 )
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53790066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档