mysqlのテーブル結合について質問させて下さい。


下記の2つのSQLでは3つのテーブルを結合しています。

(a)
SELECT *
FROM table_a a LEFT JOIN table b b ON a.id = b.id, table_c c
WHERE a.id = c.id

(b)
SELECT *
FROM table_a a, table_c c LEFT JOIN table b b ON a.id = b.id
WHERE a.id = c.id

(a)はmysql4でもmysql5でも実行可能ですが、
(b)はmysql5ではエラーとなってしまいます。
「Unknown column 'a.id' in 'on clause」

この違いはなぜ起きるのでしょうか。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/06/29 22:27:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント60pt

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.7.1 JOIN 構文

仕様変更による物。

以前は、カンマ演算子(,)と JOIN の両方は同じ優先順位だったので、接合式 t1, t2 JOIN t3 は ((t1, t2) JOIN t3) として解釈されました。現在は JOIN が高い優先順位を持つので、式は (t1, (t2 JOIN t3)) として解釈されます。この変更は、ON 条項が接合の演算子内のカラムだけを参照する事ができ、優先順位の変更はそれらの演算子が何であるかについての解釈を変えてしまうので、この条項を利用するステートメントに影響を与えます。

この変更により、構文bは b と c が先に結合されるため、この時点では参照されていない a のカラムを指定することが出来無くなりました。

id:the_yakisoba

ありがとうございます。

大変参考になりました。

2009/06/29 22:27:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません