MySQL Alias Question
-
05-07-2019 - |
Вопрос
Мне интересно, почему это не удается
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? это необязательно? Р>
Решение
Чтобы выполнить коррелированный подзапрос, вам нужен псевдоним для внешней таблицы . Вы создали псевдоним для поля внешней таблицы. Взгляните на исправленный код ниже, в котором есть псевдоним для таблицы (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
не является обязательным для псевдонимов.