Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在5.0.12更改后离开连接-如何重写查询_Mysql_Join_Mysql Error 1054 - Fatal编程技术网

MySQL在5.0.12更改后离开连接-如何重写查询

MySQL在5.0.12更改后离开连接-如何重写查询,mysql,join,mysql-error-1054,Mysql,Join,Mysql Error 1054,在5.0.12之后,MySQL更改了左连接的语法,以匹配SQL2003标准。所以 ... FROM t1 , t2 LEFT JOIN t3 ON (expr) 需要重写为 ... FROM (t1 , t2) LEFT JOIN t3 ON (expr 否则它将被解析为。。。从t1开始,(t2左连接t3开(expr)) 现在,我有一个古老的应用程序,我正在从MySQL 3.23(eek!)移植到5.1,旧代码有以下查询: select b.*, c.*, g.*, p.perfname,

在5.0.12之后,MySQL更改了左连接的语法,以匹配SQL2003标准。所以

... FROM t1 , t2 LEFT JOIN t3 ON (expr)
需要重写为

... FROM (t1 , t2) LEFT JOIN t3 ON (expr
否则它将被解析为
。。。从t1开始,(t2左连接t3开(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.chrgrade中的列未知。这是因为它正在解析为

选择b.,c.,g.*,p.perfname,p.persname 来自预订b,(客户c b.chrggrade=g.grcode上的左连接等级g) 在b.person=p.percode上左连接人p 其中完整的class='Y'和发票的class='N' 日期为“2009-03-25”至“2009-03-31” c.custcode=b.cust 客户订单、个人订单、tsref订单、stdt订单

我想

我确信正确放置的支架可以解决这个问题,但我被难住了。 我在上找到了对该更改的引用,它显示了如何修复简单的左连接,但我仍然无法为该查询找到它。
David

完全停止使用逗号语法,并在JOIN语句中显式使用。逗号语法强制您将连接条件放在WHERE子句中,这可能要在左/右连接之后才能执行,具体取决于它的解析方式。使用显式联接使查询更具可读性

…从t1、t2向左连接t3打开(expr) 变成 …从t1内部连接t2打开(expr)左连接t3打开(expr)


这也将修复您看到的错误。除非bookings表中没有chrgrade,否则将无法修复错误。

完全停止使用逗号语法,并在JOIN语句中显式显示。逗号语法强制您将连接条件放在WHERE子句中,这可能要在左/右连接之后才能执行,具体取决于它的解析方式。使用显式联接使查询更具可读性

…从t1、t2向左连接t3打开(expr) 变成 …从t1内部连接t2打开(expr)左连接t3打开(expr)

这也将修复您看到的错误。除非bookings表中没有chrgrade,否则将无法修复错误