gpt4 book ai didi

sql - 我创建此 CHECK 约束以保证 4 个字段中至少有 2 个在条目中是等效的。为什么它不起作用?

转载 作者:行者123 更新时间:2023-12-01 23:22:12 24 4
gpt4 key购买 nike

我试图创建一个约束来强制每一行的四个字段中至少有两个彼此相等。

我想到了

    CHECK(
(CASE WHEN (CAMPO1=CAMPO2)
OR (CAMPO1=CAMPO3)
OR (CAMPO1=CAMPO4)
OR (CAMPO2=CAMPO3)
OR (CAMPO2=CAMPO4)
OR (CAMPO3 = CAMPO4)
THEN 1 END) = 1 );

然而,令我惊讶的是,下面的 INSERT 语句通过了。

INSERT INTO Ejercicio2A_2(
CAMPO1,
CAMPO2,
CAMPO3,
CAMPO4)
VALUES('A','B','C','D')

没有一个值与另一个值相等,因此我需要约束来拒绝 INSERT 语句。为什么没有呢?

最佳答案

Why did it not?

SQL 使用三值逻辑。 bool 表达式的计算结果可以为 truefalseunknown

你需要一个ELSE 0

否则 CASE 表达式的计算结果为 NULL

NULL = 1未知

检查约束仅拒绝 false 值并允许 trueunknown

但是,正如@Gordon 指出的那样,这样做没有任何值(value)

CHECK (CASE WHEN  <CONDITION> THEN 1 ELSE 0 END) = 1 );

无论如何 - 这应该写成

CHECK (<CONDITION>);

关于sql - 我创建此 CHECK 约束以保证 4 个字段中至少有 2 个在条目中是等效的。为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67940673/

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