Question

Je me demande pourquoi cela échoue

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'

c’est une réponse fournie par le guide de certification pour quelques exemples d’exercices.

btw, pour alias quand dois-je utiliser AS? est-ce optionnel?

Était-ce utile?

La solution

Pour exécuter une sous-requête corrélée, vous avez besoin d'un alias pour la table externe . Vous avez créé un alias pour le champ de la table externe. Regardez le code corrigé ci-dessous, qui a un alias pour la table (Cou) qui est référencé dans la sous-requête (notez que l'alias de champ n'est pas obligatoire, je l'ai donc supprimé. Il n'y a aucun mal à le rajouter si vous le souhaitez) :

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

En ce qui concerne l'utilisation de l'AS, c'est optionnel. Par exemple, dans la requête ci-dessus, vous pourriez écrire Country AS Cou , ce serait la même chose.

Autres conseils

Je suppose que cela a quelque chose à voir avec votre version de MySQL. Je viens de tester exactement la même requête et celle-ci aboutit (syntaxiquement au moins). C’est avec MySQL 5.0.45 .

Si la version de MySQL n'est pas le problème, vous pouvez également essayer de retaper la requête. Cela peut paraître idiot, mais parfois des caractères non imprimables peuvent glisser dans votre requête lors de la frappe ou du copier / coller (je pense copier / coller à partir d’un fichier PDF, en particulier, car il s’agit d’un guide).

Et oui, AS est facultatif pour les alias.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top