MySQLエイリアスの質問
-
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'
いくつかのサンプル演習用の認定ガイドが提供する回答。
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
はオプションです。
所属していません StackOverflow