我想知道为什么会失败
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?是可选的吗?
答案 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
对于别名是可选的。