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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top