(T-SQL) 为什么这个子查询需要一个别名?
(T-SQL) Why does this subquery need an alias?
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
非常简单的查询,只是想知道 - 为什么它需要别名才能工作?
FROM
中的每个子查询都需要在 SQL
中有别名
您必须进行定义,以便为查询添加更多约束。否则,您的数据库引擎将不知道如何引用子查询。
我们可以把子查询结果看成是一个新的table,但是这个table没有名字,所以给他起个别名。
SQL 服务器需要子查询后的别名(或派生 table,如果您愿意)。这不仅是一项要求,而且是一个非常好的主意。通常,列引用应该是 限定的 ,这意味着它们包含 table 别名。如果没有别名,则无法限定对子查询中列的引用。我认为这是一件坏事。
SQL 服务器不是唯一需要别名的数据库。 MySQL 和 Postgres(以及大多数 Postgres 派生的数据库)也是如此。 Oracle 和 SQLite 没有。 Google 的 BigQuery 也没有。
我不知道别名是否是 ANSI/ISO 要求。但是,我总是使用一个,无论数据库如何。
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
非常简单的查询,只是想知道 - 为什么它需要别名才能工作?
FROM
中的每个子查询都需要在 SQL
您必须进行定义,以便为查询添加更多约束。否则,您的数据库引擎将不知道如何引用子查询。
我们可以把子查询结果看成是一个新的table,但是这个table没有名字,所以给他起个别名。
SQL 服务器需要子查询后的别名(或派生 table,如果您愿意)。这不仅是一项要求,而且是一个非常好的主意。通常,列引用应该是 限定的 ,这意味着它们包含 table 别名。如果没有别名,则无法限定对子查询中列的引用。我认为这是一件坏事。
SQL 服务器不是唯一需要别名的数据库。 MySQL 和 Postgres(以及大多数 Postgres 派生的数据库)也是如此。 Oracle 和 SQLite 没有。 Google 的 BigQuery 也没有。
我不知道别名是否是 ANSI/ISO 要求。但是,我总是使用一个,无论数据库如何。