Wer in SQL Statements ein Join auf eine dritte oder x-te Tabelle macht, wird evtl. bei MySQL 5.x einen Fehler wie diesen erhalten:
#1054 - Unknown column 'xxxx' in 'on clause'
Beispiel einer Abfrage, die in MySQL 4.x ohne weiteres zum Ergebnis führt:
SELECT ... FROM t1 , t2 LEFT JOIN t3 ON (t1.id = t3.id)
ab MySQL 5.0.15 wird dies zum Fehler führen, da ab der 5er Version der SQL:2003 Standard etwas konkreter interpretiert wird. Vorher war es also MySQL also etwas nachsichtiger als jetzt. Jetzt hält es sich etwas strikter an den Standard.
SQL:2003
<from clause> ::= FROM <table reference list>
<table reference list> ::=
<table reference> [ { <comma> <table reference> }... ]
<table reference> ::=
<table factor>
| <joined table>
<joined table> ::=
<cross join>
| <qualified join>
| <natural join>
...
Wenn wir also schreiben
SELECT ... FROM t1 , t2 LEFT JOIN t3 ON (t1.id = t3.id)
wird das wie folgt geparset
(1) SELECT ... FROM t1, (t2 LEFT JOIN t3 ON (t1.id = t3.id))
und nicht als
(2) SELECT ... FROM (t1, t2) LEFT JOIN t3 ON (t1.id = t3.id)
Somit kannst du im Ausdruck "expr" nur auf Spalten von t2 und t3 Bezug nehmen.
Für MySQL 5.x würden diese Anweisung wie folgt funktionieren:
(1) SELECT ... FROM (t1, t2) LEFT JOIN t3 ON (t1.id = t3.id)
oder
(2) SELECT ... FROM t1 JOIN t2 LEFT JOIN t3 ON (t1.id = t3.id)
oder
(3) SELECT ... FROM t2, t1 LEFT JOIN t3 ON (t1.id = t3.id)
weitere Hilfen:
Bug-Report: http://bugs.mysql.com/bug.php?id=13551
Dokumentation für die Behandlung von JOINs: http://dev.mysql.com/doc/refman/5.0/en/join.html