Pergunta

eu estou querendo saber por que essa falha

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'

sua resposta um fornecido pelo guia de certificação para alguns exercícios de amostra.

btw, por apelido quando eu tenho que usar como? isit opcional?

Foi útil?

Solução

Para executar uma subconsulta correlacionada, você precisa de um alias para o tabela externa . Você criou um alias para campo da tabela externa . Dê uma olhada no código corrigido abaixo, que tem um alias para a tabela (Cou) que é referenciada na subconsulta (note que o alias campo não é necessária para que eu o retirei. Não há nenhum mal em adicioná-lo novamente, se desejar) :

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

Em relação ao uso de AS, que é opcional. Por exemplo, na consulta acima você poderia escrever Country AS Cou, seria o mesmo.

Outras dicas

Eu estou supondo que ele tem algo a ver com você está versão do MySQL. Eu apenas testada exatamente a mesma consulta e ele consegue (syntaxically pelo menos). Isso é com MySQL 5.0.45 .

Se a versão do MySQL não é o problema, você pode também tentar digitar novamente a consulta. Pode parecer bobagem, mas às vezes impublicável caracteres podem escorregar na sua consulta, enquanto digitação ou copiar / colar (estou pensando copiar / colar a partir de um PDF aqui, especialmente, uma vez que é a partir de um guia).

E, sim, AS é opcional para aliases.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top