MySQL 5.x : #1054 – Unknown column “ in ‚on clause‘

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