(T-SQL)为什么此子查询需要别名?

时间:2018-10-02 21:52:44

标签: sql sql-server tsql 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

非常简单的查询,只是想知道-为什么需要别名才能使其正常工作?

2 个答案:

答案 0 :(得分:3)

SQL Server需要子查询(或派生表,如果需要)后的别名。这不仅是一个要求,而且是一个非常好的主意。通常,列引用应为限定,这意味着它们包括表别名。没有别名,对子查询中列的引用将不合格。我认为这是一件坏事。

SQL Server不是唯一需要别名的数据库。 MySQL和Postgres(以及大多数Postgres派生的数据库)也是如此。 Oracle和SQLite则没有。 Google的BigQuery也没有。

我不知道别名是否是ANSI / ISO要求。但是,无论数据库如何,我总是使用一个。

答案 1 :(得分:2)

FROM中的每个子查询都需要在SQL中具有别名。

必须定义,以便可以在查询中添加更多约束。否则,您的数据库引擎将不知道如何引用子查询。

我们可以将子查询结果视为一个新表,但是该表没有名称,因此请给他一个别名。