MySQL Alias Question
Мне интересно, почему это не удается
mysql> ВЫБЕРИТЕ Континент C, Имя, SurfaceArea -> ИЗ СТРАНЫ -> ГДЕ SurfaceArea = ( -> ВЫБРАТЬ МАКС (SurfaceArea) -> ИЗ СТРАНЫ -> ГДЕ Континент = С); ОШИБКА 1054 (42S22): неизвестный столбец "C" в "предложении где"
Это ответ, предоставленный руководством по сертификации для некоторых примеров упражнений.
Кстати, для псевдонима, когда я должен использовать AS? это необязательно?
2 ответа
Чтобы выполнить коррелированный подзапрос, вам нужен псевдоним для внешней таблицы. Вы создали псевдоним для поля внешней таблицы. Взгляните на исправленный код ниже, в котором есть псевдоним для таблицы (Cou), на которую есть ссылка в подзапросе (обратите внимание, что псевдоним поля не требуется, поэтому я удалил его. Добавлять его обратно, если хотите, не повредит):
SELECT Continent, Name, SurfaceArea
FROM Country Cou
WHERE SurfaceArea =
(
SELECT MAX(SurfaceArea)
FROM Country
WHERE Continent = Cou.Continent
);
Что касается использования AS, это необязательно. Например, в запросе выше вы можете написать Country AS Cou
было бы то же самое.
Я предполагаю, что это как-то связано с вашей версией MySQL. Я только что проверил точно такой же запрос, и он успешно (по крайней мере, синтаксически). Это с MySQL 5.0.45.
Если версия MySQL не является проблемой, вы также можете попробовать повторить запрос. Это может звучать глупо, но иногда непечатные символы могут проскальзывать в вашем запросе при наборе текста или копировании / вставке (я думаю, что копирование / вставка из PDF-документа здесь, особенно, поскольку это из руководства).
И да, AS
необязательно для псевдонимов.