✨
Error Code: 1248. Every derived table must have its own alias の解決方法
執筆理由
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