如何在 SQL 中的两列之间创建检查约束?

Posted

技术标签:

【中文标题】如何在 SQL 中的两列之间创建检查约束?【英文标题】:How to create a check constraint between two columns in SQL? 【发布时间】:2009-02-25 07:12:41 【问题描述】:

我正在尝试使用

创建一个基本工资 (BP) 表
CREATE TABLE bp (
   bpid       VARCHAR(5), 
      FOREIGN KEY (bpid) REFERENCES designation(desigid), 
   upperlimit DECIMAL(10,2) NOT NULL, 
   lowerlimit DECIMAL(10,2) NOT NULL, 
   increment  DECIMAL(10,2) NOT NULL 
      CONSTRAINT llvalid CHECK (upperlimit > lowerlimit)
 );

正如你在结尾处看到的,我想检查upperlimit 是否大于lowerlimit,我该怎么做?

【问题讨论】:

【参考方案1】:

这可能(很可能)取决于您使用的数据库。

与 oracle 语法(例如这里:http://www.techonthenet.com/oracle/check.php)相比,您缺少的可能是 NULL 和 CONSTRAINT 之间的 ','

【讨论】:

【参考方案2】:

问题在于您已将其定义为列级约束,但它引用了其他列。您必须在表级别定义约束。

ALTER TABLE bp
    ADD CONSTRAINT CK_limit CHECK ( upperlimit > lowerlimit)

【讨论】:

为什么?它会产生什么样的差异?【参考方案3】:

这是正确的 SQL 查询...

CREATE TABLE bp (bpid VARCHAR(5),
FOREIGN KEY (bpid) REFERENCES designation(desigid), 
upperlimit DECIMAL(10,2) NOT NULL,
lowerlimit DECIMAL(10,2) NOT NULL,
increment DECIMAL(10,2) NOT NULL,
CONSTRAINT llvalid CHECK (upperlimit > lowerlimit));

注意最后一行中 NOT NULL 和 CONSTRAINT 后面的逗号。

【讨论】:

以上是关于如何在 SQL 中的两列之间创建检查约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较数据框中的两列,检查它们之前是不是存在?

Access 2016 SQL:查找不同表的两列之间的最小绝对差

如何使用折线图以图形方式显示两个变量之间的相关性(来自同一 DataFrame 的两列)

试图在r中隔离数据框中的两列[重复]

如何使用 UCanAccess 在两列上创建具有唯一约束的表?

SQLAlchemy如何检查值是否在两列中的值之间?