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
- Puoi cercare gli errori MySQL qui
- funzioni di gruppo
- post simile su stackoverflow.com
- un altro forum in cui è stato discusso un problema simile
- 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.
-
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 osql-mode="modes"
in un file di opzioni comemy.cnf (Unix operating systems)
omy.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 osql-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
- ONLY_FULL_GROUP_BY la modalità sql è eccessivamente restrittiva
- sql-mode:solo la modalità completa gruppo per non funziona
- Domande frequenti su MySQL 5.0:Modalità SQL del server