После 5.0.12 MySQL изменил синтаксис для левых соединений, чтобы соответствовать стандарту SQL2003. Так
... 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 (eek!) На 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
Сбой при ошибке SQL 1054, неизвестный столбец в b.chrggrade. Это потому что он разбирается как
выберите b. , c. , g. *, P.perfname, p.persname
из бронирования б, (клиент с
левый класс g на b.chrggrade = g.grcode)
оставленный присоединяющийся человек p на b.person = p.percode
где завершено = 'Y' и выставлено счет-фактура = 'N'
и дата сделана между '2009-03-25' и '2009-03-31'
и c.custcode = b.cust
заказ по заказу, человек, црэф, stdt
Я думаю.
Я уверен, что правильно расположенные скобки могут это исправить, но я в тупике.
Я нашел ссылку на это изменение в http://bugs.mysql.com/bug.php?id=13551,, которая показывает, как исправить простое левое соединение, но я все еще не могу решить его для этого запроса.
David