Nach 5.0.12 MySQL geändert die Syntax für linke Joins zu SQL2003 Standard entsprechen. SoMySQL LEFT JOIN nach 5.0.12 Änderungen - Wie schreibe ich die Abfrage
... FROM t1 , t2 LEFT JOIN t3 ON (expr)
Bedürfnisse neu geschrieben werden als
... FROM (t1 , t2) LEFT JOIN t3 ON (expr
sonst wird es analysiert werden als ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))
Jetzt habe ich eine alte app, die ich von MySQL bin Portierung 3,23 (eek!) zu 5.1, und der alte Code hat diese Abfrage:
select b.*, c.*, g.*, p.perfname, p.persname
from bookings b, customer c
left join grade g on b.chrggrade=g.grcode
left join person p on b.person=p.percode
where complete='Y' and invoiced='N'
and datemade between '2009-03-25' and '2009-03-31'
and c.custcode=b.cust
order by cust, person, tsref, stdt
Dies schlägt mit SQL-Fehler 1054, unbekannt Spalte in b.chrggrade. Dies liegt daran, dass die Analyse wie folgt erfolgt:
auswählen b. , c., g. *, P.perfname, p.persname von Buchungen b, (c Kunde links Grad g auf b.chrggrade = g.grcode beitreten) Person p beizutreten links auf b.person = p.percode wo complete = 'Y' und fakturiert = 'N' und datemade zwischen '2009-03-25' und '2009-03-31' und c.custcode = b.cust bestellen von cust, person, tsref, stdt
Ich denke.
Ich bin mir sicher, richtig platzierte Klammern können das beheben, aber ich bin ratlos. Ich fand einen Verweis auf diese Änderung unter http://bugs.mysql.com/bug.php?id=13551, die zeigt, wie man einen einfachen linken Join repariert, aber ich kann es immer noch nicht für diese Abfrage ausarbeiten. David