首页 > 解决方案 > SQL:需要“全部”解释

问题描述

与操作员一起使用时,我试图将头绕在“全部”上。

我目前的理解是内部查询返回一个子集,外部查询在该子集上使用 ALL,外部查询如何告诉每个

SELECT playerno, leagueno
FROM Players
WHERE playerno >= ALL(select playerno FROM Players WHERE leagueno IS NOT NULL)

我试图弄清楚这是如何工作的。内部查询返回例如 (1,2,3),那么它如何知道 playerno 应该大于或等于 3 而不仅仅是 2?我假设 ALL 意味着检查每个值,这也意味着 playerno 大于 1 或 2 足以满足条件,因此可以在 WHERE 子句中使用,即使这不是我们想要的因为我们只想要最大的数字。

标签: sqlsql-server

解决方案


询问:

SELECT playerno, leagueno
FROM Players
WHERE playerno >= ALL(select playerno FROM Players WHERE leagueno IS NOT NULL)

相当于:

SELECT playerno, leagueno
FROM Players
WHERE playerno >= (SELECT MAX(playerno) FROM Players WHERE leagueno IS NOT NULL)
-- assumption: playerno is defined as NOT NULL

这意味着对于定义联赛的每个 Playerno,playerno 必须大于或等于。


推荐阅读