MySQL别名问题

标签 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?是可选的吗?

最佳答案

为了执行相关子查询,您需要外部 的别名。您为外表的字段 创建了一个别名。看看下面更正后的代码,它有一个在子查询中引用的表 (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/

相关文章:

mysql - 如何解决 InnoDB 表的开销和有效问题?

java - 如何将 ResulSet 的多个值放入 Java 对象中

linux - 将 oneline 命令放入别名中

c# - 是否有任何已知的方法来更改命名空间但支持 API 中的旧方法

linux - Git通过ubuntu中的别名 pull 多个存储库

Php/MySQL 帮助 - 每日随机选择?

mysql - 使用行值在 mysqli 中选择列

sql - 查询优化 - 增加估计数据大小

php - mySQLI - mysqli_real_escape_string 问题

sql - 有没有办法使用 SQL Server 2012 查找 View 中引用的所有无效列?