Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top