如何在 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 的两列)