SQLのエラーはパターンが決まっている
SQLを書いていてエラーが出ると、最初は焦ってしまうものです。でも実は、SQLのエラーはよく出るパターンが決まっています。パターンさえ知っておけば、落ち着いて対処できるようになります。
この記事では、初心者がよくつまずくSQLエラーの原因と対処法をわかりやすくまとめます。
エラー①:スペルミス・タイポ
症状
「syntax error」や「unknown column」などのエラーが出る。
原因
キーワードや列名のスペルが間違っている。
例:
SELCT * FROM users ← SELECTのスペルミス
SELECT naem FROM users ← nameのスペルミス
対処法
エラーメッセージをよく読んで、どの単語が問題かを確認する。SQL整形ツールを使うと、キーワードが自動で大文字に変換されるのでスペルミスに気づきやすくなります。
エラー②:クォーテーションの閉じ忘れ
症状
「unterminated string」や「syntax error」が出る。
原因
文字列をシングルクォーテーション(’)で囲む際に、閉じるのを忘れている。
例:
SELECT * FROM users WHERE name = ‘田中太郎 ← 閉じていない
対処法
文字列の前後に必ずシングルクォーテーションがあるか確認する。整形ツールで見やすくするとミスに気づきやすくなります。
エラー③:テーブル名・列名が存在しない
症状
「table not found」「unknown column」などのエラーが出る。
原因
・テーブル名や列名のスペルが違う
・大文字・小文字を区別するデータベースで名前が一致していない
・そもそもそのテーブルや列が存在しない
対処法
まずテーブルの一覧や列の定義を確認する。MySQLなどでは「SHOW TABLES;」や「DESCRIBE テーブル名;」で確認できます。
エラー④:カンマの付け忘れ・余分なカンマ
症状
「syntax error near …」などのエラーが出る。
原因
複数の列を指定するときにカンマを忘れたり、最後の列の後にカンマを付けてしまっている。
例:
SELECT id name email FROM users ← カンマがない
SELECT id, name, email, FROM users ← 最後に余分なカンマ
対処法
列の区切りにカンマを入れる。最後の列の後にはカンマを付けない。整形ツールで見やすくすると確認しやすくなります。
エラー⑤:JOIN条件の指定ミス
症状
データが爆発的に増えて返ってくる(クロスジョインになる)、または「ambiguous column」エラーが出る。
原因
・ON句でテーブルを結びつける条件を書き忘れている
・複数テーブルに同じ列名があり、どちらか指定していない
例:
SELECT * FROM users JOIN orders ← ON句がない
対処法
JOINを使うときは必ずON句で結合条件を書く。列名が重複する場合は「テーブル名.列名」のように指定する。
エラー⑥:WHERE句とHAVING句の混同
症状
「invalid use of group function」などのエラーが出る。
原因
集計関数(COUNTやSUMなど)の結果で絞り込みたいのにWHEREを使っている。
例:
SELECT category, COUNT() FROM products WHERE COUNT() > 10 GROUP BY category ← 間違い
対処法
集計結果で絞り込む場合はHAVINGを使う。
正しい例:
SELECT category, COUNT() FROM products GROUP BY category HAVING COUNT() > 10
エラー解決のコツ
・エラーメッセージを翻訳して読む(英語のエラーもGoogle翻訳で十分わかる)
・エラーが出た行番号付近を重点的に確認する
・SQL整形ツールで見やすくしてから確認する
・一度シンプルなSQLに戻して少しずつ条件を追加していく
まとめ
・SQLのエラーはパターンが決まっているので慌てなくてOK
・スペルミス・クォーテーション・カンマ・JOIN条件が4大原因
・整形ツールを使うとミスに気づきやすくなる
・エラーメッセージをよく読むことが解決の近道

コメント