Condividi
Error: SELECT list is not in GROUP BY clause and contains nonaggregated column
Cercando di eseguire la query sql di una SELECT con JOIN su più tabelle, ed infine raggruppare il risultato con la clausola GROUP BY su Id della tabella principale, ricevo il seguente messaggio di errore:
SELECT list is not in GROUP BY clause and contains nonaggregated column
Perché si verifica e come posso risolvere?
Risolta
4
MySql
29-08-2024
2 Risposte
136 Visite
0
Risposte ( 2 approvate )
Si riceve il messaggio di errore "SELECT list is not in GROUP BY clause and contains nonaggregated column", perché in MySql a partire dalla versione 5.7.5 (e superiori) è attiva di default la modalità
ONLY_FULL_GROUP_BY
Questa non consente di eseguire query di tipo SELECT su colonne aventi condizioni HAVING o raggruppare records con colonne che non vengono espressamente dichiarate nella ORDER BY; di default qualsiasi query di questo tipo viene in automatico rifiutata da MySql ritornando quel messaggio di errore.
Le possibili soluzioni all'errore sono:
ONLY_FULL_GROUP_BY
mode, eseguendo l'istruzione:sql mode
tramite PhpMyAdmin nella sezione variabili (se avete i permessi per farlo), rimuovendo da essa il valore testualeONLY_FULL_GROUP_BY
Potreste anche prendere in considerazione la possibilità di togliere la clausola
ONLY_FULL_GROUP_BY
; se analizzate e strutturate bene la vostra query in tanti casi non ve ne è bisogno, e rimuovere e risolvere così a monte l'errore "SELECT list is not in GROUP BY clause and contains nonaggregated column" senza necessariamente intervenire sul valoreONLY_FULL_GROUP_BY
della variabile sql-mode.Importante sottolineare che eseguendo l'istruzione
per modificare la variabile sql-mode , questa avrà effetto solo sulla query interessata e la modifica non sarà permanente sull'intero db.
Per rendere permanente la modifica alla sql-mode e disabilitare in modo definitivo il valore
ONLY_FULL_GROUP_BY
, dovete intervenire sul file di configurazione di MySql, che solitamente si trova in/etc/mysql/my.cnf
Stoppate il server MySql, dopodiché editate il file my.cnf, al suo interndo individuate la stringa con il valore sql-mode (nella sezione
[mysqld]
e rimuovete il testo ONLY_FULL_GROUP_BY dai valori assegnati alla variabile (troverete più valori separati da virgola), salvate ed infine fate ripartire MySql. Da adesso in poi questa modalità non sarà più attiva di default.