Errore: SELECT list is not in GROUP BY clause and contains nonaggregated column - fix

Dopo essere passato alla versione 5.7 di MySql, ricevo il seguente messaggio di errore:

SELECT list is not in GROUP BY clause and contains nonaggregated column

non appena eseguo una query contenente la clausola GROUP BY, preciso che la stessa identica query lanciata con la versione precedente di MySql non mi dava quest'errore, come mai accade questo? E come posso risolvere? Grazie.

In Corso 3
MySql 09-09-2019 2 Risposte 3385 Visite 0

Risposte ( 2 approvate )

  1. Michele Brughese
    0
    09-09-2019 14:15:21
    Rispondi

    Puoi disabilitare l'impostazione only_full_group_by eseguendo le seguenti impostazioni:

    mysql> 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';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

    questo ti consentirà di risolvere l'errore SELECT list is not in GROUP BY clause and contains nonaggregated column.

  2. Giacomo Barrile
    0
    09-09-2019 13:16:18
    Rispondi

    L'errore: SELECT list is not in GROUP BY clause and contains nonaggregated column si manifesta nellaversione MySql 5.7 in base alle impostazioni di modalità di esecuzione del server di Database MySql che opera in STRICT_MODE ed in questo particolare caso anche in only_full_group_by, mentre le versioni precedenti erano impostate di default diciamo in una modalità più elastica o permissiva se preferisci.

     

    Sovente con questo errore si è soliti ricevere anche il messaggio: in aggregated query without group by expression #2 of select list contains nonaggregated column che ti sta dicendo che nella clausola GROUP BY della tua SELECT contiene una (o più) colonna (campo) che non è adatta ad essere trattata come tipo aggregato.

     

    Per risolvere questo problema devi aggiungere o rimuovere alla tua GROUP BY tutte quelle colonne previste nella SELECT di tipo aggregato, proprio perché Mysql per come impostato lavora in modalità only_full_group_by.

    Oppure devi andare nelle impostazioni avanzate di MySql e cambiare la modalità di esecuzione settando:

    set global sql_mode=''

    a livello globale, oppure per singola sessione (lanciando la seguente query prima della SELECT) in questo modo:

    set session sql_mode=''

    in questo modo disabiliterai la modalità STRICT (applicata anche su altri elementi) ed anche la ONLY FULL GROUP BY.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

Agostino Marticoli

Agostino Marticoli

Autore di questa domanda

 Domanda Precedente

 Elenco Domande 

Domanda Successiva