Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLエラーについて、対処方法や原因の調べ方についてまとめています。

SQLエラーの対処方法

SQLエラー「あいまい(ambiguous)です」

複数テーブルをjoinしている場合、同じカラム名を持つテーブルがあるときに発生するエラーです。

mysql> SELECT emp_no, first_name, last_name, dept_name
    -> FROM employees ,dept_emp,departments
    -> where employees.emp_no = dept_emp.emp_no
    ->  and departments.dept_no = dept_emp.dept_no
    ->  limit 10;
ERROR 1052 (23000): Column 'emp_no' in field list is ambiguous

SELECT employees.emp_no, first_name, last_name, dept_name
FROM employees ,dept_emp,departments
where employees.emp_no = dept_emp.emp_no
 and departments.dept_no = dept_emp.dept_no
 limit 10;

+--------+-------------+-------------+------------------+
| emp_no | first_name  | last_name   | dept_name        |
+--------+-------------+-------------+------------------+
|  10011 | Mary        | Sluis       | Customer Service |
|  10038 | Huan        | Lortz       | Customer Service |
|  10049 | Basil       | Tramer      | Customer Service |
|  10060 | Breannda    | Billingsley | Customer Service |
|  10088 | Jungsoon    | Syrzycki    | Customer Service |
|  10098 | Sreekrishna | Servieres   | Customer Service |
|  10112 | Yuichiro    | Swick       | Customer Service |
|  10115 | Chikara     | Rissland    | Customer Service |
|  10126 | Kayoko      | Valtorta    | Customer Service |
|  10128 | Babette     | Lamba       | Customer Service |
+--------+-------------+-------------+------------------+
10 rows in set (0.19 sec)

上記の例では「emp_noって、employeesテーブルにもdept_empテーブルにも存在するカラム名だけどどちらのことを指しているの?指定があいまいだよ」というエラーになります。

対処方法は、「あいまいだ」と指摘されたカラムにemployees.emp_noとテーブル名指定をすればOKです。

SQLエラー「syntax(文法) error at ~or near …」

ふだん、もっとも多く目にするのがsyntax(文法)エラーでしょう。

しかし、どう見ても文法的に間違っていないのにsyntax errorが出るというケースがあります。

下記の例は、asで指定したカラム名「left」が予約後だったために起こったエラーです。予約後以外を使うか、バッククォート(「`」)を使うことで対処しました。

mysql> select emp_no as left from employees limit 10;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left from employees limit 10' at line 1

mysql> select emp_no as `left` from employees limit 10;
+-------+
| left  |
+-------+
| 10001 |
| 10002 |
| 10003 |
| 10004 |
| 10005 |
| 10006 |
| 10007 |
| 10008 |
| 10009 |
| 10010 |
+-------+
10 rows in set (0.00 sec)

複雑なSQLクエリでは、カッコの対応などが一見してわからないケースもあります。

整形ツールにクエリを入力して、見やすい状態に整えてからカッコ対応やカンマの抜けなどをチェックするとエラー箇所を発見しやすいと思います。

【関連記事】
SQL formatter オンラインで使える無料整形ツール 3選

文法が合っているのにsyntaxエラーが出るケースは多く、原因がわからなくてハマることも多いです。エラーメッセージに、どのキーワード周辺でエラーが発生しているかがわかるので、「mysql syntax error left」などのワードで検索して、原因を探しましょう。

SQLエラーコードで検索する

mysql> select * from employee;
ERROR 1146 (42S02): Table 'employees.employee' doesn't exist
mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | xGeorgi    | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

エラーメッセージの先頭にERROR 1146 (42S02)と表示されています。MySQLの場合、ERROR直後の数字がエラーコード、カッコ内がエラーステートです。

「MySQL 1146」などでネット検索して原因を探しましょう。

上記の場合は、employeesをemployeeとタイプミスしたのが原因で「指定のテーブルが存在しない」エラーとなっています。

また、エラーメッセージそのものをコピペしてネット検索するのも有効です。

まとめ

ポテパンダの一言メモ
  • あいまい(ambiguous)エラーは、テーブル名を明示することで対処する。
  • syntax errorは、文法以外の原因でも発生する可能性がある。
  • エラーの対処方法を探すには、エラーコードをネット検索すると効率的。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。