2016-03-24 24 views
8

Ho riscontrato problemi nel passaggio a una versione offline del database di baseball Lahman SQL. Stavo usando un terminale incorporato in un corso EDX. Questo comando funziona benissimo sul terminale web:Codice errore: 1055 incompatibile con sql_mode = only_full_group_by

SELECT concat(m.nameFirst,concat(" ",m.nameLast)) as Player, 
    p.IPOuts/3 as IP, 
    p.W,p.L,p.H,p.BB,p.ER,p.SV,p.SO as K, 
    p.IPOuts+p.W*5+p.SV+p.SO-p.BB-p.L-p.H as PTS, 
    p.yearID as Year 
FROM Pitching p 
Inner Join Master m 
    ON p.playerID=m.playerID 
WHERE p.yearID=2014 AND p.IPOuts>=50 
GROUP BY m.playerID 
ORDER BY PTS DESC; 

che esegue SQL 5.5.46, ma quando uso la mia versione offline in esecuzione 5.7.10 ottengo il seguente codice di errore: Codice

errore : 1055. L'espressione n. 1 dell'elenco SELECT non è nella clausola GROUP BY e contiene la colonna non aggregata "stats.m.nameFirst", che è non dipende in modo funzionale dalle colonne nella clausola GROUP BY; questo è incompatibile con sql_mode = only_full_group_by

Ho letto un sacco di soluzioni ai problemi della gente, ma loro non hanno aiutato in questo caso. Non è mai successo prima, quindi penso che sia super ovvio o forse sto diventando ok al codice. Ad ogni modo, qualcuno sa come risolvere questo problema?

+1

non hai bisogno di un 'gruppo by'.remove esso. –

+0

Oh, hai perfettamente ragione. – Frydaddy07

+0

Vedere http://stackoverflow.com/documentation/mysql/8245/error-1055-only-full-group-by-something-is-not-in-group-by-clause –

risposta

28

in 5,7 la SQLMode è impostato per default:

ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 

Per rimuovere la clausola ONLY_FULL_GROUP_BY si può fare questo:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

Questo suppone che è necessario fare che GROUP BY con i non aggregate colonne.

saluti

+0

Hai ragione, e questo funziona . Ma sembra che io abbia ingannato e non ho avuto bisogno del gruppo per clausola. Grazie però, se avessi fatto bene, questo avrebbe funzionato per me. – Frydaddy07

+0

Queste modifiche di default da 5.5 a 5.6 rendono la vita difficile per molte persone. Sono più che motivati, ma generalmente non si notano. Cordiali saluti –

12

La soluzione accettata di cui sopra non ha funzionato per me su versione 5.7.9, for osx10.9 (x86_64).

allora la seguente lavorato -

set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 
+0

La soluzione accettata sopra non ha funzionato per me sulla versione 5.7.18 su Ubuntu 16.04, ma funziona su –

+0

per me su Ubuntu 16.04 –

+0

Esiste una soluzione permanente, risolvila invece di eseguirla quotidianamente. anis? –