SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【MySQL】ERROR 1054 (42S22): Unknown column ~ in ‘on clause’

問題

SQLは間違ってないと思うんだけど、MySQL4系からMySQL5に変えたら、エラーが発生する。

mysql> select * from t1, t2 left outer join t3 on t1.a=t3.c; 
ERROR 1054 (42S22): Unknown column 't1.a' in 'on clause' 

答え

MySQL 5.0.12 より古いものを新しいバージョンを変えるとき問題が発生する。

MySQL5の不具合というか、今までが不具合だったと言うべきか、SQLを書き換えるしかないらしい。

カンマ演算子の先行は、INNER JOIN、CROSS JOIN、LEFT JOIN 等のそれよりも少ないです。もし接合条件がある場合にカンマ接合と別のタイプの接合を混合すると、Unknown column ‘col_name’ in ‘on clause’ という形のエラーが発生するかもしれません。

http://dev.mysql.com/doc/refman/5.1/ja/join.html

SQLの標準では、優先度がJOINより「,(カンマ)」の方が低い。大丈夫だった以前の状態の方がよろしくない。

対策としては、「,(カンマ)」を使わないで、 t1 join t2 と書く。

select * from t1 join t2 join t3 on t1.a=t3.c;

優先順位の問題だから、こんな手もありとか。

select * from (t1,t2) join t3 on t1.a=t3.c;

もともとテーブルの結合にカンマを使う習慣がない人は全く影響ないですが、誰が書いたかわからないシステムには混じっていることもあります。

関連するメモ

コメント