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 необязательно для псевдонимов.

Другие вопросы по тегам