質問

これがなぜ失敗するのか疑問に思っています

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'

いくつかのサンプル演習用の認定ガイドが提供する回答。

btw、エイリアスの場合、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バージョンに問題がない場合は、クエリの再入力を試みることもできます。ばかげているように聞こえるかもしれませんが、タイピングやコピー/貼り付け中に unprintable 文字がクエリに滑り込むことがあります(特にガイドからのコピーなので、ここでPDFからコピー/貼り付けを考えています)

そして、はい、エイリアスの AS はオプションです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top