Domanda MySQL Alias
-
05-07-2019 - |
Domanda
Mi chiedo perché questo fallisca
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'
è una risposta fornita dalla guida alla certificazione per alcuni esercizi di esempio.
a proposito, per alias quando devo usare AS? è opzionale?
Soluzione
Per eseguire una sottoquery correlata, è necessario un alias per la tabella esterna . Hai creato un alias per il campo della tabella esterna. Dai un'occhiata al codice corretto di seguito, che ha un alias per la tabella (Cou) a cui fa riferimento la sottoquery (nota che l'alias del campo non è obbligatorio, quindi l'ho rimosso. Non c'è nulla di male nell'aggiungerlo se lo desideri) :
SELECT Continent, Name, SurfaceArea
FROM Country Cou
WHERE SurfaceArea =
(
SELECT MAX(SurfaceArea)
FROM Country
WHERE Continent = Cou.Continent
);
Per quanto riguarda l'utilizzo di AS, è facoltativo. Ad esempio, nella query sopra potresti scrivere Paese AS Cou
, sarebbe lo stesso.
Altri suggerimenti
Suppongo che abbia qualcosa a che fare con la tua versione di MySQL. Ho appena testato esattamente la stessa query e ha esito positivo (almeno sintatticamente). Questo è con MySQL 5.0.45 .
Se la versione di MySQL non è il problema, puoi anche provare a riscrivere la query. Può sembrare sciocco ma a volte i caratteri non stampabili possono scivolare nella tua query durante la digitazione o la copia / incolla (sto pensando di copiare / incollare da un PDF qui, in particolare, poiché proviene da una guida).
E, sì, AS
è facoltativo per gli alias.