人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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」

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

よろしくお願いします。


●質問者: the_yakisoba
●カテゴリ:コンピュータ インターネット
✍キーワード:MySQL ON SELECT SQL エラー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント

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 のカラムを指定することが出来無くなりました。

◎質問者からの返答

ありがとうございます。

大変参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ