Die folgende Abfrage ist mit ONLY_FULL_GROUP_BY
ungültig aktiviert. Der erste ist ungültig, da der Name in der Auswahlliste nicht im GROUP BY
genannt wird Klausel
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
ohne GROUP-Spalten ist illegal, wenn es keine GROUP BY-Klausel gibt
Sie können die Abfrage so umschreiben, dass sie problemlos als
funktioniertmysql> SELECT name, MAX(age) FROM t GROUP BY name;
oder
Deaktivieren Sie ONLY_FULL_GROUP_BY und der Fehler sollte verschwinden.
Links können Ihnen helfen
- Sie können hier nach MySQL-Fehlern suchen
- gruppieren nach Funktionen
- ähnlicher Beitrag auf stackoverflow.com
- ein weiteres Forum, in dem ein ähnliches Problem diskutiert wird
- server-sql-mode
AKTUALISIEREN
Dies ist die Antwort auf Ihren Kommentar.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Der MySQL-Server kann in verschiedenen SQL-Modi arbeiten und diese Modi je nach Wert von
sql_mode
für verschiedene Clients unterschiedlich anwenden Systemvariable. Diese Fähigkeit ermöglicht es jeder Anwendung, den Betriebsmodus des Servers an ihre eigenen Anforderungen anzupassen. -
Um den SQL-Modus beim Serverstart festzulegen, verwenden Sie
--sql-mode="modes"
Option in der Befehlszeile odersql-mode="modes"
in einer Optionsdatei wiemy.cnf (Unix operating systems)
odermy.ini (Windows)
. Modi ist eine durch Kommas getrennte Liste verschiedener Modi. Um den SQL-Modus explizit zu löschen, setzen Sie ihn mit--sql-mode=""
auf eine leere Zeichenfolge auf der Befehlszeile odersql-mode=""
in einer Optionsdatei. -
Um den SQL-Modus zur Laufzeit zu ändern, verwenden Sie ein
SET [GLOBAL|SESSION] sql_mode='modes'
Anweisung, um die Systemvariable sql_mode festzulegen. Das Setzen der GLOBAL-Variable erfordert das SUPER-Privileg und wirkt sich auf den Betrieb aller Clients aus, die sich ab diesem Zeitpunkt verbinden. Das Setzen der SESSION-Variable wirkt sich nur auf den aktuellen Client aus. Jeder Client kann seinen eigenen sql_mode-Wert für Sitzungen jederzeit ändern. -
Verwenden Sie die folgenden Anweisungen, um den aktuellen globalen oder Sitzungs-sql_mode-Wert zu ermitteln:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Sie können auf die sql_mode-Tabelle verweisen
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Dies geschieht aufgrund der MySQL-Version. Was ist die MySQL-Version Ihres lokalen Computers?
Wie überprüfe ich die MySQL-Version?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Zum Testen von sql_mode ONLY_FULL_GROUP_BY
, habe ich die Tabelle patient
erstellt mit zwei Spalten id, name
und eingefügte Aufzeichnungen. Denken Sie an sql_mode ONLY_FULL_GROUP_BY
ist nicht standardmäßig eingestellt, Sie müssen einstellen, wenn Sie möchten.
1)MySQL-Version 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
Es schlug fehl, es hatte keinen Sinn, sql_mode auf ONLY_FULL_GROUP_BY
zu setzen da es keine nicht aggregierten Spalten zulässt, die nicht in der GROUP BY-Klausel benannt sind.
2) MySQL-Version 5.1.40-Community
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Dann nach dem Setzen von 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)MySQL-Version 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Dann nach dem Setzen von 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
Fazit
Wie Sie sehen können, ist die Abfrage bei Version 5.0.45 fehlgeschlagen und bei/nach 5.1.40 und 5.5.28 vor der MySQL-Version 5.1.10(nicht sicher)
Abfrage ohne GROUP BY
schlägt unabhängig von sql_mode ONLY_FULL_GROUP_BY
fehl eingestellt oder nicht.
Einige interessante Fehler und sql_mode FAQ-Link
- ONLY_FULL_GROUP_BY SQL-Modus ist zu restriktiv
- sql-mode:nur full group by mode funktioniert nicht
- MySQL 5.0 FAQ:Server-SQL-Modus