首页 > 解决方案 > 为什么外部查询中同一张表的这个子查询可以作为有效比较

问题描述

对于所有部门,我试图找到该部门使用的最高课程编号。为了练习,我尝试使用 ALL 修饰符而不是 MAX() 来实现这一点。

我找到了解决方案,但我不确定为什么会这样。

SELECT department, coursenr 
FROM course U 
WHERE U.coursenr 
>= ALL (SELECT coursenr FROM course WHERE department = U.department)

这是我正在使用的桌子的图片。

在此处输入图像描述

当我从外部查询中删除别名“U”并将子查询更改为读取

SELECT coursenr FROM course WHERE department = department

整个查询不再正常工作。我的问题是,当我从外部查询中删除“U”别名时,为什么整个查询不再起作用?换句话说,在这种情况下,别名“U”到底为我做了什么?

标签: sql

解决方案


我认为您的问题已在评论中得到澄清:

但是,部门不总是等于 u.department 吗?
这就是为什么我不明白它的逻辑目的是什么。

答案是不。
在子查询中,是别名为的表的U.department列的值,是子查询的列的值。并将这两个值相互比较。 这就是您需要别名的原因。 但是,如果您从中删除,则此查询:departmentUdepartmentdepartment


UU.department

SELECT coursenr FROM course WHERE department = department

返回coursenrtable 中的所有值course,因为:

department = department

总是true
然后这个:

SELECT department, coursenr 
FROM course U 
WHERE U.coursenr 
>= ALL <values of coursenr>

将仅返回coursenr整个表中具有最大值的行(如果有更多具有此最大值的行,则返回更多行)。


推荐阅读