MySQL别名问题

时间:2009-09-10 03:46:23

标签: mysql sql alias mysql-error-1054

我想知道为什么会失败

mysql> SELECT Continent C, Name, SurfaceArea
    -> FROM Country
    -> WHERE SurfaceArea = (
    -> SELECT MAX(SurfaceArea)
    -> FROM Country
    -> WHERE Continent = C);
ERROR 1054 (42S22): Unknown column 'C' in 'where clause'

一些样本练习的认证指南提供的答案。

顺便说一下,别名什么时候我必须使用AS?是可选的吗?

2 个答案:

答案 0 :(得分:8)

要执行相关子查询,您需要外部的别名。您为外部表的字段创建了别名。看看下面的更正代码,它具有子查询中引用的表(Cou)的别名(请注意,字段别名不是必需的,因此我将其删除。如果您愿意,将其添加回来没有任何害处) :

SELECT Continent, Name, SurfaceArea
FROM Country Cou
WHERE SurfaceArea = 
(
    SELECT MAX(SurfaceArea)
    FROM Country
    WHERE Continent = Cou.Continent
);

关于AS的使用,它是可选的。例如,在上面的查询中,您可以编写Country AS Cou,它将是相同的。

答案 1 :(得分:0)

我认为它与你的MySQL版本有关。我刚刚测试完全相同的查询,它成功(至少语法上)。那是 MySQL 5.0.45

如果MySQL版本不是问题,您也可以尝试重新输入查询。这可能听起来很愚蠢,但有时不可打印的字符在打字或复制/粘贴时可能会在您的查询中滑落(我想在这里复制/粘贴PDF,特别是,因为它来自指南)。

而且,是的,AS对于别名是可选的。