Error Code: 1248. Every derived table must have its own alias の解決方法

2022/06/11に公開

執筆理由

SQLで下記のテーブルから、同じクラスの生徒で、好きな色(favorite_color)が全員赤色のクラスIDを抽出できるようなSQL文を作成したかった。

テーブル名:class

id class_id name favorite_color
1 1 佐藤
2 1 田中
3 1 近藤
4 2
5 2
6 3 三浦

このテーブルだと、同一クラスでfacorite_colorが全員「赤」なのは、class_id = 1と3になる。

しかし、タイトルのエラーが出て解決に手間取ってしまったので、メモとして解決方法まとめることにしました。

今回のエラーが出たSQL文

下記のSQLを作成した。

SELECT class_id
FROM 
( SELECT class_id
    FROM class 
    GROUP BY class_id
    HAVING COUNT(*) = SUM(CASE WHEN favorite_color = '赤' THEN 1 ELSE 0 END)
)

すると下記のエラーが出た。

Error Code: 1248. Every derived table must have its own alias

エラーの原因

英吾のままだと何を言っているのかよく分からないので、ひとまず翻訳。。。。
すると、「すべての派生テーブルには、独自の通称が必要です」とのこと。
今回は、FROM の後にサブクエリ(派生テーブル)を入れたにも関わらず、名前をつけていなかったから怒られているみたい。。。

解決策

エラーの内容から、FROM の後の派生テーブルに名前をつければいいっぽいのでSQLを下記のように修正してみました。

FROM 
( SELECT class_id
    FROM practice_sql.class 
    GROUP BY class_id
    HAVING COUNT(*) = SUM(CASE WHEN favorite_color = '赤' THEN 1 ELSE 0 END)
) AS hoge -----派生テーブルに対してつけた名前

そして、SQLを実行すると無事欲しかった形のデータを抽出することができました。

class_id
1
3

感想

エラー文をちゃんと読んで原因を確認するのは原点にして頂点なのだと改めて痛感しました。

Discussion