Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:errore SQL:1140, SQLState:42000

La seguente query non è valida con ONLY_FULL_GROUP_BY abilitato. Il primo non è valido perché il nome nell'elenco di selezione non è nominato in GROUP BY clausola

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

senza colonne GROUP è illegale se non esiste una clausola GROUP BY

Puoi riscrivere la query per funzionare correttamente come

mysql> SELECT name, MAX(age) FROM t GROUP BY name;

o

Disattiva ONLY_FULL_GROUP_BY e l'errore dovrebbe scomparire.

I link possono aiutarti

  1. Puoi cercare gli errori MySQL qui
  2. funzioni di gruppo
  3. post simile su stackoverflow.com
  4. un altro forum in cui è stato discusso un problema simile
  5. modalità server-sql

AGGIORNAMENTO

Questa è la risposta al tuo commento.

But i would like to know more about disabling the Group BY mode in mysql db.  

Modalità SQL del server

  • Il server MySQL può operare in diverse modalità SQL e può applicare queste modalità in modo diverso per client diversi, a seconda del valore di sql_mode variabile di sistema. Questa capacità consente a ciascuna applicazione di adattare la modalità operativa del server alle proprie esigenze.

  • Per impostare la modalità SQL all'avvio del server, utilizzare --sql-mode="modes" opzione sulla riga di comando o sql-mode="modes" in un file di opzioni come my.cnf (Unix operating systems) o my.ini (Windows) . modalità è un elenco di diverse modalità separate da virgole. Per cancellare esplicitamente la modalità SQL, impostala su una stringa vuota usando --sql-mode="" sulla riga di comando o sql-mode="" in un file di opzioni.

  • Per modificare la modalità SQL in fase di esecuzione, utilizzare un

    SET [GLOBAL|SESSION] sql_mode='modes'
    istruzione per impostare la variabile di sistema sql_mode. L'impostazione della variabile GLOBAL richiede il privilegio SUPER e influisce sul funzionamento di tutti i client che si connettono da quel momento in poi. L'impostazione della variabile SESSION ha effetto solo sul client corrente. Qualsiasi client può modificare il proprio valore sql_mode di sessione in qualsiasi momento.

  • Per determinare il valore sql_mode corrente globale o di sessione, utilizzare le seguenti istruzioni:

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  • Puoi fare riferimento a tabella sql_mode

I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.  

Ciò accade a causa della versione di MySQL. Qual è la versione MySQL del tuo computer locale?

Come controllare la versione di MySQL?

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28    |
+-----------+
1 row in set (0.00 sec)    

Per testare sql_mode ONLY_FULL_GROUP_BY , ho creato la tabella patient con due colonne id, name e record inseriti. Ricorda sql_mode ONLY_FULL_GROUP_BY non è l'impostazione predefinita, è necessario impostare se lo si desidera.

1) Versione MySQL 5.0.45-community-nt

SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Non è riuscito, non aveva senso impostare sql_mode su ONLY_FULL_GROUP_BY poiché non consentirà colonne non aggregate che non sono denominate nella clausola GROUP BY.

2)Versione MySQL 5.1.40-community

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Quindi, dopo aver impostato sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

3)Versione MySQL 5.5.28

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Quindi, dopo aver impostato sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Conclusione

Come puoi vedere, la query non è riuscita sulla versione 5.0.45 e ha avuto esito positivo su/dopo 5.1.40 e 5.5.28Prima della versione MySQL 5.1.10(non sicuro) query senza GROUP BY fallisce indipendentemente da sql_mode ONLY_FULL_GROUP_BY impostato o no.

Alcuni bug interessanti e link faq sql_mode

  1. ONLY_FULL_GROUP_BY la modalità sql è eccessivamente restrittiva
  2. sql-mode:solo la modalità completa gruppo per non funziona
  3. Domande frequenti su MySQL 5.0:Modalità SQL del server