Mysql 我们必须在子查询中使用表变量的别名吗
我对下面的代码进行了很长时间的调试,并意识到我的错误是最初在子查询中的变量之前省略了Mysql 我们必须在子查询中使用表变量的别名吗,mysql,sql,subquery,alias,Mysql,Sql,Subquery,Alias,我对下面的代码进行了很长时间的调试,并意识到我的错误是最初在子查询中的变量之前省略了t.。我们必须在子查询中包含别名,这是一条规则吗 注意:正如下面的答案所述,真正的问题不是子查询中缺少别名,而是使用保留工作“rank”。如果使用“rnk”,则子查询中不需要别名 WITH t AS( SELECT *, ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Salary ASC) AS "rank" FROM Employee)
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
用你正在使用的数据库标记你的问题。哦,我明白了。这是我代码的真正问题,而不是别名问题。我很困惑,因为别名似乎没有必要,而且我以前从未使用过它。非常感谢!将等级更改为rnk也有效。我想知道为什么我需要在排名中添加“”,这就是为什么。。