作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在只是尝试以下查询:
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 标准为 ALL
和 ANY
(又名 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/
我是一名优秀的程序员,十分优秀!