Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我们必须在子查询中使用表变量的别名吗_Mysql_Sql_Subquery_Alias - Fatal编程技术网

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也有效。我想知道为什么我需要在排名中添加“”,这就是为什么。。