我想知道为什么会失败
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?是可选的吗?
最佳答案
为了执行相关子查询,您需要外部表 的别名。您为外表的字段 创建了一个别名。看看下面更正后的代码,它有一个在子查询中引用的表 (Cou) 的别名(请注意,字段别名不是必需的,所以我删除了它。如果您愿意,将它添加回去也没有坏处) :
SELECT Continent, Name, SurfaceArea
FROM Country Cou
WHERE SurfaceArea =
(
SELECT MAX(SurfaceArea)
FROM Country
WHERE Continent = Cou.Continent
);
关于AS的使用,是可选的。例如,在上面的查询中你可以写成 Country AS Cou
,它是一样的。
关于MySQL别名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403249/