De volgende zoekopdracht is ongeldig met ONLY_FULL_GROUP_BY
ingeschakeld. De eerste is ongeldig omdat de naam in de selectielijst niet wordt genoemd in de GROUP BY
clausule
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
zonder GROUP-kolommen is illegaal als er geen GROUP BY-clausule is
U kunt de query herschrijven om goed te werken als
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
of
Schakel de ONLY_FULL_GROUP_BY uit en de fout zou moeten verdwijnen.
Links kunnen je helpen
- U kunt hier zoeken naar MySQL-fouten
- group-by-functions
- vergelijkbare post op stackoverflow.com
- een ander forum waar een soortgelijk probleem werd besproken
- server-sql-mode
UPDATE
Dit is een antwoord op uw opmerking.
But i would like to know more about disabling the Group BY mode in mysql db.
-
De MySQL-server kan in verschillende SQL-modi werken en kan deze modi voor verschillende clients verschillend toepassen, afhankelijk van de waarde van de
sql_mode
systeem variabele. Deze mogelijkheid stelt elke toepassing in staat om de bedrijfsmodus van de server aan te passen aan zijn eigen vereisten. -
Om de SQL-modus bij het opstarten van de server in te stellen, gebruikt u de
--sql-mode="modes"
optie op de opdrachtregel, ofsql-mode="modes"
in een optiebestand zoalsmy.cnf (Unix operating systems)
ofmy.ini (Windows)
. modes is een lijst met verschillende modes, gescheiden door komma's. Om de SQL-modus expliciet te wissen, stelt u deze in op een lege tekenreeks met--sql-mode=""
op de opdrachtregel, ofsql-mode=""
in een optiebestand. -
Om de SQL-modus tijdens runtime te wijzigen, gebruikt u een
SET [GLOBAL|SESSION] sql_mode='modes'
statement om de systeemvariabele sql_mode in te stellen. Voor het instellen van de GLOBAL-variabele is het SUPER-privilege vereist en beïnvloedt de werking van alle clients die vanaf dat moment verbinding maken. Het instellen van de SESSION-variabele heeft alleen invloed op de huidige client. Elke client kan zijn eigen sessie sql_mode-waarde op elk moment wijzigen. -
Gebruik de volgende instructies om de huidige globale of sessie sql_mode-waarde te bepalen:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
U kunt verwijzen naar sql_mode-tabel
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Dit gebeurt vanwege de MySQL-versie. Wat is de MySQL-versie van uw lokale computer?
Hoe de MySQL-versie controleren?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Voor het testen van sql_mode ONLY_FULL_GROUP_BY
, ik heb tabel patient
gemaakt met twee kolommen id, name
en ingevoegde records. Onthoud sql_mode ONLY_FULL_GROUP_BY
niet standaard is ingesteld, moet u deze instellen als u dat wilt.
1)MySQL-versie 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
Het is mislukt, het had geen zin om de sql_mode in te stellen op ONLY_FULL_GROUP_BY
omdat het geen niet-geaggregeerde kolommen toestaat die niet zijn genoemd in de GROUP BY-clausule.
2)MySQL-versie 5.1.40-community
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Na het instellen van 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-versie 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Na het instellen van 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
Conclusie
Zoals u kunt zien, is de query mislukt op versie 5.0.45 en is deze geslaagd op/na 5.1.40 en 5.5.28 vóór MySQL-versie 5.1.10(niet zeker)
zoekopdracht zonder GROUP BY
mislukt ongeacht sql_mode ONLY_FULL_GROUP_BY
instellen of niet.
Enkele interessante bugs en sql_mode faq link
- ONLY_FULL_GROUP_BY sql-modus is te beperkend
- sql-modus:alleen volledige groepering op modus werkt niet
- MySQL 5.0 FAQ:Server SQL-modus