MySQL Alias ​​Question - PullRequest
       16

MySQL Alias ​​Question

3 голосов
/ 10 сентября 2009

мне интересно, почему это не удается

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'

это ответ, предоставленный руководством по сертификации для некоторых примеров упражнений.

Кстати, для псевдонима, когда я должен использовать AS? это необязательно?

Ответы [ 2 ]

8 голосов
/ 10 сентября 2009

Чтобы выполнить коррелированный подзапрос, вам нужен псевдоним для внешней таблицы . Вы создали псевдоним для внешнего поля поле . Посмотрите на исправленный код ниже, в котором есть псевдоним для таблицы (Cou), на которую есть ссылка в подзапросе (обратите внимание, что псевдоним поля не требуется, поэтому я удалил его. Добавлять его обратно, если хотите, не повредит) :

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

Что касается использования AS, то это необязательно. Например, в приведенном выше запросе вы можете написать Country AS Cou, это будет то же самое.

0 голосов
/ 10 сентября 2009

Я предполагаю, что это как-то связано с вашей версией MySQL. Я только что протестировал точно тот же запрос, и он успешно (по крайней мере, синтаксически). Вот с MySQL 5.0.45 .

Если проблема не в версии MySQL, вы также можете попробовать повторить запрос. Это может звучать глупо, но иногда непечатаемые символы могут проскальзывать в вашем запросе при наборе текста или копировании / вставке (я думаю, что копирование / вставка из PDF здесь, особенно, поскольку это из руководства).

И, да, AS необязательно для псевдонимов.

...