我刚刚找到了ALL比较运算符。我看到一些像
这样的例子select ProductId, Price
from tbl1
where Price > ALL (select Price from tbl2)
当我说a_value is > All (some_other_values)
时,我总是可以说a_value > MAX(some_other-values)
所以上面的查询等于
select ProductId, Price
from tbl1
where Price > (select Max(Price) from tbl2)
那么为什么SQL Server提供了ALL运算符?
答案 0 :(得分:1)
正如所有运算符的MSDN(从2008年开始的SQL Server)中所提到的,它将标量值与单列值集进行比较。
scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )
例如: -
>ALL
表示大于每个值,表示大于最大值。
所以 >ALL (1, 2, 3)
表示大于3。
类似地,可以在这里更改比较运算符,&amp; < ALL (1, 2, 3)
表示小于1.
ALL
必须以比较运算符开头,如果查询根本没有返回任何行,它还会计算为 TRUE
。< / p>
例如: -
以下OUTER SELECT
查询返回除子查询之外的所有行,根本不返回任何行。
;WITH CTE AS (
SELECT 1 AS 'id'
UNION ALL
SELECT 1 AS 'id'
UNION ALL
SELECT 2 AS 'id'
UNION ALL
SELECT 3 AS 'id'
)
SELECT * FROM CTE WHERE id >ALL ( SELECT id FROM CTE WHERE 1 = 0 )
因此,与在子查询中使用简单MAX相比,这证明它具有不同的行为。