sql - 为什么外部查询中同一张表的这个子查询可以作为有效比较
问题描述
对于所有部门,我试图找到该部门使用的最高课程编号。为了练习,我尝试使用 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”到底为我做了什么?
解决方案
我认为您的问题已在评论中得到澄清:
但是,部门不总是等于 u.department 吗?
这就是为什么我不明白它的逻辑目的是什么。
答案是不。
在子查询中,是别名为的表的U.department
列的值,是子查询的列的值。并将这两个值相互比较。
这就是您需要别名的原因。
但是,如果您从中删除,则此查询:department
U
department
department
U
U.department
SELECT coursenr FROM course WHERE department = department
返回coursenr
table 中的所有值course
,因为:
department = department
总是true
。
然后这个:
SELECT department, coursenr
FROM course U
WHERE U.coursenr
>= ALL <values of coursenr>
将仅返回coursenr
整个表中具有最大值的行(如果有更多具有此最大值的行,则返回更多行)。
推荐阅读
- node.js - 无法从应用容器连接到 postgresDB docker 容器
- vim - vim缩进html标签,属性在不同的行
- c - 位域更加优化
- liferay - 如何在 LiferayPortal 中使用 Freemarker 显示 Web 内容的纯 HTML
- python - 邮件发送时间优化
- python - TensorFlow“请提供单个数组或数组列表作为模型输入”
- linux - /etc/hosts 文件,其中已解析的 dns 机器与其他名称相关联
- sql - 如何在 django 中将锦标赛数据库建模为 SQL
- ios - UITableViewDiffableDataSource - 移动到另一个部分时项目的动画过渡
- python - 每次有序列表中单词的长度发生变化时,如何输入换行符?