【MySQL】「Column ‘[カラム名]’ in order clause is ambiguous」エラーの対処法

  • 2018年7月17日
  • 2018年7月17日
  • 未分類

どちらかと言えば、初心者がやりがちなMySQLのエラーですが、私はいまだにやらかすのでまとめ。
MySQLの構文エラーです。

エラー文はこちら。

ERROR 1052 (23000): Column ‘[カラム名]’ in order clause is ambiguous

Google翻訳にで訳すと、「order節の ‘[カラム名]’列があいまいです」とのことでした。

 

こちらのエラーは、JOIN を使って テーブルを結合するときに発生することがあります。
原因は、結合するテーブルの両方に存在する、同名のカラム名をソート条件で使っているためです。

例えば、下記のようなテーブルがあり、これを結合してみます。
テーブル1:profile

id name year blood
1 田中 20 2
2 鈴木 31 3
3 佐藤 26 1

テーブル2:blood_type

id blood_type
1 A
2 B
3 O
4 AB

SQL文はこのようになるかと思います。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id;

で、このSQL文に、ソート条件として、profile テーブルの idカラムを指定したとします。
その時に、下記のように記述してしまうと、今回のエラーが発生します。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id ORDER BY id;

単に id というカラムは、結合している blood_type テーブルにも存在しているため、どちらの id でソートするかが明記されていないためです。
そのため、下記のように修正します。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id ORDER BY profile.id;

ソートしたいカラムがどのテーブルのものかを指定したので、問題なく実行できました。

 

以上、SQL文のエラーの対処法でした。
カラムが多いテーブル名を扱うときに、よくカラムが重複しているのに気づかずこのエラーに遭遇することがあります。
また、ORDER条件の時だけでなく、SELECTの後ろで取得したいカラム名を指定するときにも、重複しているカラム名を指定してしまうと、どのテーブルのカラム?と聞かれてしまうので注意しましょう。
まあ、SELECT文なので、ミスをしてもデータが消えたり、書き換えられたりすることはないので、MySQL初心者でも恐れずに、どんどんエラーを発生させて対処法を学びましょう。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG