sql - 使用 SQL 集合论子句时何时需要别名?
问题描述
我刚开始学习 SQL,并试图从我的错误中学习。在我的一次练习中,我不得不name
从数据库中找到 city scities
没有列为数据库中的capital
城市countries
。最初我尝试了下面的代码,但它产生了一个错误。
SELECT name
FROM cities
EXCEPT
SELECT capital
FROM countries
ORDER BY capital ASC;
正确的代码是:
SELECT city.name
FROM cities AS city
EXCEPT
SELECT country.capital
FROM countries AS country
ORDER BY name;
有人可以向我解释为什么混叠在这里有很大的不同吗?
解决方案
UNION、EXCEPT 或 INTERSECT 的一个ORDER BY
对完整结果进行排序。整个查询的列名由第一个查询定义。所以这个查询:
SELECT name
FROM cities
EXCEPT
SELECT capital
FROM countries
返回一个包含名为 的单列的结果name
。
添加 anorder by
在概念上与以下内容相同:
select *
from (
SELECT name
FROM cities
EXCEPT
SELECT capital
FROM countries
) x
order by ....;
由于内部查询只返回一个列name
,这是您可以在order by
.
您在第二个查询中使用的别名不会更改整体结果的列名,这决定了该order by
子句可用的列名。
推荐阅读
- python - pip 未在 macOS 上使用 homebrew 安装
- javascript - 在 Safari 中禁用两指滚动
- python-3.x - 异常或其他块级范围中的变量范围
- c# - SSIS WinSCP C# 脚本任务正在运行但不执行任何操作
- c# - 有没有办法在 C# .net 中将时区格式(美国/芝加哥)转换为 UTC(-0500)?
- javascript - 为什么禁用缓存会使我的网页正常工作?
- jenkins - 如何从 jenkins 管道中的 JQL 查询中提取 TestCaseID
- ag-grid - 加载的行高与 ag-grid 中的实际行高不同
- 7zip - 如何在 Windows 上提取大文件
- r - 如何整理 Cox zph(比例风险)图?