我们是否必须在子查询中使用 table 变量的别名

Do we have to use the alias of the table variable inside the subquery

我调试了下面的代码很长时间,我意识到我的错误是我最初在子查询中的变量之前省略了 t.。我们是否必须在子查询中包含别名?

注意:正如下面的回答所述,真正的问题不是子查询中缺少别名,而是保留工作“rank”的使用。如果改为使用“rnk”,则不需要子查询中的别名。

WITH t AS(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Salary ASC) AS "rank" FROM 
Employee)
SELECT t.Id, t.Company, t.Salary
FROM t
JOIN (SELECT t.Company, MAX(t.rank) AS maxRank FROM t GROUP BY t.Company) s
ON t.Company=s.Company
WHERE CASE WHEN s.maxRank%2=0 THEN t.rank=s.maxRank/2 OR t.rank=s.maxRank/2+1
ELSE t.rank=CEIL(s.maxRank/2) END

不,只要您不需要区分子查询和外部查询,您就不需要。

但是请不要对列使用保留字,否则需要进行封装

WITH t AS(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Salary ASC) AS "rank" FROM 
Employee)
SELECT t.Id, t.Company, t.Salary
FROM t
JOIN (SELECT Company, MAX(`rank`) AS maxRank FROM t GROUP BY Company) s
ON t.Company=s.Company
WHERE CASE WHEN s.maxRank%2=0 THEN t.rank=s.maxRank/2 OR t.rank=s.maxRank/2+1
ELSE t.rank=CEIL(s.maxRank/2) END