gpt4 book ai didi

sql - 在检查约束中使用 case 语句

转载 作者:行者123 更新时间:2023-12-04 18:27:58 26 4
gpt4 key购买 nike

上周我一直在学习 SQL,但我不确定如何在检查约束中正确添加 case 语句。任何人都可以给我任何指示吗?

我有以下成绩表:

CREATE TABLE Grade
(
salary_grade char(1) NOT NULL CHECK (salary_grade = UPPER(salary_grade)),
CONSTRAINT ck_grade_scale CHECK(
CASE
WHEN salary_grade = '[A-D]'
THEN salary_scale = 'S1'
WHEN salary_grade = '[D-G]'
THEN salary_scale = 'S2'
END)

salary_scale char(2) DEFAULT 'S1' NOT NULL,

CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
CONSTRAINT ck_salary_grade CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
--constraint must be either S1 or S2
CONSTRAINT ck_salary_scale CHECK (salary_scale IN ('S1', 'S2'))
);

我想检查一下是否 salary_grade在 A-D 之间,然后是 salary_scale必须是 'S1' 或者 salary_grade在 E-G 之间,然后是“S2”。

我试图研究这个并提出后者,但它不起作用..我是否正确构建了代码?

最佳答案

我认为您可以执行以下操作:

CREATE TABLE Grade
(
salary_grade char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
salary_scale char(2) DEFAULT 'S1' NOT NULL,
CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
CONSTRAINT ck_grade_scale CHECK ( REGEXP_LIKE(salary_grade, '[A-D]', 'c') AND salary_scale = 'S1'
OR REGEXP_LIKE(salary_grade, '[E-G]', 'c') AND salary_scale = 'S2' )
);

Please see SQL Fiddle schema here.

您不需要 UPPER()salary_grade 的约束因为正则表达式检查就足够了(您已经在检查以确保它是 A 和 G 之间的大写字母)。我不认为 salary_scale 上的约束单独是必要的,因为它会在逻辑上包含在最后一个约束中。

更新

以下是您可以使用 CASE 执行此操作的方法陈述:
CREATE TABLE Grade
(
salary_grade char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
salary_scale char(2) DEFAULT 'S1' NOT NULL,
CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
CONSTRAINT ck_grade_scale CHECK ( salary_scale = CASE WHEN REGEXP_LIKE(salary_grade, '[A-D]', 'c') THEN 'S1' ELSE 'S2' END )
);

Please see SQL Fiddle schema here.

关于sql - 在检查约束中使用 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com