sql - (T-SQL) 为什么这个子查询需要别名?
问题描述
SELECT
*
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY a.vendorid ORDER BY a.CreatedDateUTC) as RowNum
,*
FROM
ZpVendors_Kim.dbo.VendorPaymentAcceptanceAudit a) Needs_Alias_Here
WHERE
RowNum = 1
非常简单的查询,只是想知道 - 为什么它需要别名才能工作?
解决方案
SQL Server 需要子查询(或派生表,如果您愿意)之后的别名。这不仅是一个要求,而且是一个非常好的主意。通常,列引用应该是限定的,这意味着它们包含一个表别名。如果没有别名,则无法限定对子查询中列的引用。我认为这是一件坏事。
SQL Server 不是唯一需要别名的数据库。MySQL 和 Postgres(以及因此大多数 Postgres 派生的数据库)也是如此。Oracle 和 SQLite 没有。Google 的 BigQuery 也没有。
我不知道别名是否是 ANSI/ISO 要求。但是,无论数据库如何,我总是使用一个。
推荐阅读
- css - 位置:选择选项时粘跳
- python - 从熊猫数据框中删除包含字符串中数值的行
- ios - 如何访问 iphone/ipad 上的 locahost 子域
- android - 仅当所有行都再次插入数据库表时,Android才会防止重复
- xmpp - XMPP 协议的“投票”机制
- html - 用于格式化学术出版物 APA 样式的 CSS
- java - TextView.setText(...) 在按钮侦听器内的循环中不起作用
- c# - 将 Wav 转换为 Mp3 - ASP.NET
- php - 具有不同标签数组的 Max()
- reactjs - ASP.NET Core React 模板不适合 TypeScript