Domanda

Dopo 5.0.12 MySQL cambiato la sintassi per sinistra si unisce per abbinare standard di SQL2003. Quindi

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

ha bisogno di essere riscritta come

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

altrimenti verrà analizzato come ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))

Ora, ho un antico app sto porting da MySQL 3.23 (EEK!) A 5.1, e il vecchio codice è questa query:

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 

Questo non riesce con l'errore di SQL 1054, sconosciuta colonna b.chrggrade. Questo è perché è l'analisi come

selezionare b. , c. , g. *, P.perfname, p.persname dalle prenotazioni b, (c cliente LEFT JOIN grado G su b.chrggrade = g.grcode) LEFT JOIN persona p su b.person = p.percode dove = completi 'Y' e fatturata = 'N' e datemade tra '2009-03-25' e '2009-03-31' e c.custcode = b.cust ORDER BY Cust, persona, TSref, STDT

Credo.

Sono sicuro staffe poste correttamente possono risolvere questo problema, ma io sono perplesso. Ho trovato riferimento a questo cambiamento a http://bugs.mysql.com/bug.php ? id = 13551 , che mostra come risolvere un semplice sinistra unirsi, ma non riesco ancora a lavorare fuori per questa query. David

È stato utile?

Soluzione

Smettere di usare la sintassi del tutto e virgola essere esplicito nelle istruzioni JOIN. Le forze di sintassi virgola di mettere la condizione di join nella clausola WHERE, che non può ottenere attuare dopo sinistra / destra si unisce, a seconda di come viene analizzato. Utilizzando esplicito ENTRA rende la query più leggibile in ogni caso.

... FROM t1, t2 t3 LEFT JOIN ON (espressione) diventa ... da T1 INNER JOIN t2 ON (espressione) LEFT JOIN t3 ON (espressione)

Questo sarà anche correggere l'errore che state vedendo. A meno che non v'è alcun chrggrade nella tabella prenotazioni, allora nulla sarà correggere l'errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top