Pregunta

Me pregunto por qué esto falla

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'

es una respuesta proporcionada por la guía de certificación para algunos ejemplos de ejercicios.

por cierto, para el alias ¿Cuándo debo usar AS? ¿es opcional?

¿Fue útil?

Solución

Para ejecutar una subconsulta correlacionada, necesita un alias para la tabla externa . Has creado un alias para el campo de la tabla externa. Eche un vistazo al código corregido a continuación, que tiene un alias para la tabla (Cou) al que se hace referencia en la subconsulta (tenga en cuenta que el alias de campo no es necesario, así que lo eliminé. No hay ningún problema en agregarlo nuevamente si lo desea) :

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

Con respecto al uso de AS, es opcional. Por ejemplo, en la consulta anterior podría escribir Country AS Cou , sería lo mismo.

Otros consejos

Supongo que tiene algo que ver con tu versión de MySQL. Acabo de probar exactamente la misma consulta y tiene éxito (sintaxis, al menos). Eso es con MySQL 5.0.45 .

Si la versión de MySQL no es el problema, también puede intentar volver a escribir la consulta. Puede sonar tonto, pero a veces los caracteres no imprimibles pueden deslizarse en su consulta al escribir o copiar / pegar (estoy pensando en copiar / pegar desde un PDF aquí, especialmente, ya que es de una guía).

Y, sí, AS es opcional para los alias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top