gpt4 book ai didi

sql-server - SQL Server 中的 ALL 与 ANY 评估

转载 作者:行者123 更新时间:2023-12-02 16:43:06 24 4
gpt4 key购买 nike

我现在只是尝试以下查询:

SELECT DISTINCT code,
CASE
WHEN id = ANY (SELECT DISTINCT u.id
FROM unit u
LEFT JOIN unit_const uc
ON u.id = uc.hid
WHERE u.property = 502
AND type = 'Acq') THEN 1
ELSE 0
END AS Case_Eval,
(SELECT DISTINCT u.id
FROM unit u
LEFT JOIN unit_const uc
ON u.id = uc.hid
WHERE u.property = 502
AND type = 'Acq') AS Evaluation
FROM unit
WHERE property = 502

正确给出以下结果:

+---------------------------------------+
| Code Case_Eval Evaluation |
+---------------------------------------+
| TP2_U1 0 NULL |
| TP2_U2 0 NULL |
| TP2_U3 0 NULL |
| TP2_U4 0 NULL |
+---------------------------------------+

但是,如果我从 ANY 切换到 ALL,则 CASE 语句的计算结果为 1。

+---------------------------------------+
| Code Case_Eval Evaluation |
+---------------------------------------+
| TP2_U1 1 NULL |
| TP2_U2 1 NULL |
| TP2_U3 1 NULL |
| TP2_U4 1 NULL |
+---------------------------------------+

但是正如您所看到的,返回 CASE 中要比较的值的 SELECT 语句始终为 NULL

CASE 语句如何将其计算为 true?单元 ID 不是 NULL(4 个单元分别是 601、602、603 和 604),那么与 ALL(NULL) 相比如何? code> 结果为真吗?

我的理解有什么错误吗?

根据ALL documentation它将标量值计算为值列表。

如果满足以下条件,则返回 true:

当指定的比较对于所有对(标量表达式,x)都为 TRUE 且 x 是单列集中的值时,返回 TRUE;否则返回 FALSE。

pair(601, NULL) 如何计算为 True?

最佳答案

SELECT DISTINCT u.id
FROM unit u
LEFT JOIN unit_const uc
ON u.id = uc.hid
WHERE u.property = 502
AND type = 'Acq'

上述语句必须返回零行。不为空。当以标量方式使用时(与“Evaluation”列一样),返回零行的子查询会被赋予 NULL 值,但子查询本身不会返回该值。

在与空集进行比较时,SQL 标准为 ALLANY(又名 SOME)定义了不同的行为。

对于ALL,比较结果为true

If T is empty or if the implied <comparison predicate> is true for every row RT 
in T, then "R <comp op> <all> T" is true.

这是根据经典逻辑,如果房间没有手机,则“房间中的所有手机均已关闭”和“房间中的所有手机均已打开”这两个语句均被视为 true ( though vacuously )电话。

对于 Any/Some 必须至少有一对实际匹配。

SQL 标准的相关内容如下。

If T is empty or if the implied <comparison predicate> is false for every row RT 
in T, then "R <comp op> <some> T" is false.

关于sql-server - SQL Server 中的 ALL 与 ANY 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26551394/

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