在 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 来自预订 b,(客户 c 在 b.chrggrade=g.grcode 上离开加入等级 g)在 b.person=p.percode 上离开加入人员 p,其中 complete='Y'并且 invoiced='N' 和 datemade 在 '2009-03-25' 和 '2009-03-31' 之间,并且 c.custcode=b.cust 由 cust、person、tsref、stdt 订购
我认为。
我确信正确放置的括号可以解决这个问题,但我很难过。我在http://bugs.mysql.com/bug.php?id=13551找到了对此更改的参考,它显示了如何修复简单的左连接,但我仍然无法解决此查询。大卫