Pregunta

Después de MySQL 5.0.12 cambiado la sintaxis de izquierda se une para que coincida con estándar SQL2003. Así

... FROM t1 , t2 LEFT JOIN t3 ON (expr)

necesita ser reescrito como

... FROM (t1 , t2) LEFT JOIN t3 ON (expr

o de lo contrario será analizado como ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))

Ahora, tengo una antigua aplicación que estoy portar desde la versión 3.23 (eek!) A 5,1, y el código de edad tiene esta consulta:

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 

Esta falla con el error SQL 1054, la columna desconocido en b.chrggrade. Esto se debe a que es el análisis como

seleccione b. , c. , g. *, P.perfname, p.persname de reservas b, (c cliente izquierdo unirse grado g en b.chrggrade = g.grcode) la izquierda se unen en persona p = b.person p.percode donde = completas 'Y' y facturado = 'N' y entre datemade '2009-03-25' y '2009-03-31' y c.custcode = b.cust ordenado por cust, persona, TSref, STDT

Creo.

Estoy seguro de soportes colocados correctamente puede solucionar esto, pero estoy perplejo. Me encontré con referencia a este cambio en la dirección http://bugs.mysql.com/bug.php ? id = 13551 , que muestra cómo solucionar un simple izquierda se unen, pero todavía no puedo trabajar hacia fuera para esta consulta. David

¿Fue útil?

Solución

Deje de usar la sintaxis de coma por completo y ser explícitos en sus estados de unirse. La coma de sintaxis le obliga a poner la condición de combinación en la cláusula WHERE, que no pueden quedar ejecutada hasta después de IZQUIERDA / DERECHA se une, dependiendo de cómo se analiza. El uso explícito UNE A hace que la consulta sea más legible de todos modos.

... FROM t1, t2 t3 LEFT JOIN ON (expr) se convierte ... FROM t1 t2 EN INNER JOIN (expr) LEFT JOIN t3 ON (expr)

Eso también corregir el error que está viendo. A menos que no hay chrggrade en la tabla de reservas, entonces nada va a corregir el error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top