您是否可以在构成派生表的查询中重用派生表的别名?

时间:2016-06-01 20:20:45

标签: sql sql-server tsql

我已经看到一些查询,其中派生表的别名也用在构成派生表的查询中。任何人都可以确认这是否允许吗?

以下是示例查询。注意别名“st”如何被使用两次:

SELECT ft.ThisColumn, st.OtherID
FROM FirstTable ft
INNER JOIN
(SELECT st.CommonID,st.OtherID,DateEntered,DateExited,row_number() OVER (PARTITION BY OtherID ORDER BY DateEntered DESC) stRank
             FROM SecondTable st
             WHERE (@StartDate BETWEEN DateEntered and DateExited)
) st
ON ft.CommonID=st.CommonID AND st.stRank=1

在这两个不同的地方使用相同的别名“st”可以吗?

1 个答案:

答案 0 :(得分:3)

派生表中的 st 只能在该查询内部访问,并且只能在FROM子句之后执行的阶段内,这是正常的,因为在外部上下文中无法访问它。

第二个 st 是整个派生表结果的别名,它将在FROM子句之后执行的外部上下文和内部阶段中使用,也可以。

如您所知,首先执行外部查询子句的FROM,这将导致派生表被执行,之后派生表返回的结果(关系)将得到 st as alias,将参与您的加入查询。

附加说明:请记住,Sql Server数据库与数学关系和集合有密切关系,正如您所知,数学理论中的所有集合都应该具有我们需要的有效名称引用它们,所以sql server中的每个关系(表,视图,表表达式,如派生表或CTE等)都应该有一个有效的名称。

但我建议你不要在一个查询中使用两个具有相同名称的别名,即使它们的逻辑处理阶段不同,因为它会降低查询的可读性。

简而言之,您的查询是正确且有效的。