3

我想知道为什么这会失败

mysql> 选择 C ​​洲,名称,SurfaceArea
    - >来自国家
    -> 表面面积 = (
    -> 选择最大(表面面积)
    - >来自国家
    -> 大陆 = C);
错误 1054 (42S22):“where 子句”中的未知列“C”

它是认证指南为一些示例练习提供的答案。

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

4

2 回答 2

8

为了执行相关子查询,您需要外表的别名您为外部表的字段创建了别名。看看下面更正后的代码,它有一个在子查询中引用的表 (Cou) 的别名(请注意,字段别名不是必需的,所以我将其删除。如果您愿意,可以将其添加回来) :

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

关于AS的使用,它是可选的。例如,在上面的查询中你可以写Country AS Cou,它是一样的。

于 2009-09-10T03:53:18.143 回答
0

我假设它与您的 MySQL 版本有关。我刚刚测试了完全相同的查询并且它成功了(至少在语法上)。这就是 MySQL 5.0.45

如果 MySQL 版本不是问题,您也可以尝试重新输入查询。这可能听起来很傻,但有时无法打印的字符可能会在输入或复制/粘贴时出现在您的查询中(我正在考虑从 PDF 复制/粘贴,特别是因为它来自指南)。

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

于 2009-09-10T04:07:23.007 回答