MySQL quickie: invalid column in ON clause

In ultima ora am alergat in jurul urmatoarei probleme: o aplicatie LAMP proaspat migrata pe MySQL recent scuipa uneori niste erori de genul celei din titlu.

Fara sa stau mult la povesti, contextul in care aparea era un query de genul SELECT bla1, bla2 FROM t1, t2, t3 LEFT JOIN t4 ON t4.id=t1.id WHERE bla3=42; . Eroarea era ceva gen "invalid column t1.id in ON clause".

Desi la prima vedere pare ok, cititorii mai perspicace ca mine or sa observe ca pare a fi de la ordinea tabelelor din FROM. Cititorii mai culti ca mine in ale MySQL-ului probabil stiu ca de la 5.0.12 incoace s-au facut niste schimbari la mecanismul de join, cea care ne intereseaza fiind cea ca JOIN-ul are precedenta mai mare decat virgula (pana atunci avusesera precedenta egala).

Solutia 1: reordonat tabelele si joinurile intr-o forma cu sens. Raspuns: FROM t2,t3,t1 LEFT JOIN t4 ON t4.id=t1.id

Solutia 2 (la care am ajuns din cauza ca unele query-uri erau prea complexe sa se aplice solutia 1) : paranteze pentru fortarea precedentei. Raspuns corectat: FROM (t1,t2,t3) LEFT JOIN t4 ON t4.id=t1.id.

Sper sa ajute pe cineva treaba asta.

Comments are closed.