После 5.0.12 MySQL изменил синтаксис левых объединений в соответствии со стандартом SQL2003. ТакMySQL LEFT JOIN после изменений 5.0.12 - Как переписать запрос
... FROM t1 , t2 LEFT JOIN t3 ON (expr)
потребности быть переписано как
... FROM (t1 , t2) LEFT JOIN t3 ON (expr
или иначе это будет разобрано как ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))
Теперь у меня есть древнее приложение, которое я уверен, портирование из MySQL 3.23 (ЕЕК!) до 5,1, а у старого кода есть этот запрос:
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
Ошибка этого с ошибкой 1054, неизвестной столбец в b.chrggrade. Это связано с тем, что он разобран как
выберите b. , c., г. *, P.perfname, p.persname от бронирований б, (клиент с оставил присоединиться к классу г на b.chrggrade = g.grcode) оставили присоединиться к лицу р на b.person = p.percode где complete = 'Y' и invoiced = 'N' и датамады между '2009-03-25' и '2009-03-31' и c.custcode = b.cust order by cust, person, tsref, stdt
думаю.
Я уверен, что правильно поставленные скобки могут исправить это, но я в тупике. Я нашел ссылку на это изменение на http://bugs.mysql.com/bug.php?id=13551, в котором показано, как исправить простое левое соединение, но я до сих пор не могу его обработать для этого запроса. David