Følgende forespørgsel er ugyldig med ONLY_FULL_GROUP_BY
aktiveret. Den første er ugyldig, fordi navnet på den valgte liste ikke er navngivet i GROUP BY
klausul
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
uden GROUP-kolonner er ulovligt, hvis der ikke er nogen GROUP BY-klausul
Du kan omskrive forespørgslen for at fungere fint som
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
eller
Sluk ONLY_FULL_GROUP_BY og fejlen skulle forsvinde.
Links kan hjælpe dig
- Du kan søge i MySQL-fejl her
- group-by-functions
- lignende indlæg på stackoverflow.com
- et andet forum, hvor lignende problem blev diskuteret
- server-sql-mode
OPDATERING
Dette er svar på din kommentar.
But i would like to know more about disabling the Group BY mode in mysql db.
-
MySQL-serveren kan fungere i forskellige SQL-tilstande og kan anvende disse tilstande forskelligt for forskellige klienter, afhængigt af værdien af
sql_mode
systemvariabel. Denne egenskab gør det muligt for hver applikation at skræddersy serverens driftstilstand til dens egne krav. -
For at indstille SQL-tilstanden ved serverstart skal du bruge
--sql-mode="modes"
mulighed på kommandolinjen, ellersql-mode="modes"
i en option-fil såsommy.cnf (Unix operating systems)
ellermy.ini (Windows)
. tilstande er en liste over forskellige tilstande adskilt af kommaer. For at rydde SQL-tilstanden eksplicit skal du indstille den til en tom streng ved hjælp af--sql-mode=""
på kommandolinjen ellersql-mode=""
i en option-fil. -
For at ændre SQL-tilstanden under kørsel skal du bruge en
SET [GLOBAL|SESSION] sql_mode='modes'
udsagn for at indstille systemvariablen sql_mode. Indstilling af GLOBAL-variablen kræver SUPER-privilegiet og påvirker driften af alle klienter, der forbinder fra det tidspunkt. Indstilling af SESSION-variablen påvirker kun den aktuelle klient. Enhver klient kan til enhver tid ændre sin egen session sql_mode værdi. -
For at bestemme den aktuelle globale eller session sql_mode værdi, brug følgende sætninger:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Du kan henvise til sql_mode-tabel
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Dette sker på grund af MySQL-versionen. Hvad er MySQL-versionen af din lokale computer?
Hvordan tjekker man MySQL-versionen?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Til test af sql_mode ONLY_FULL_GROUP_BY
, Jeg oprettede tabellen patient
med to kolonner id, name
og indsatte poster. Husk sql_mode ONLY_FULL_GROUP_BY
er ikke standard indstillet, du skal indstille hvis du vil.
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
Det mislykkedes, der var ingen mening i at indstille sql_mode til ONLY_FULL_GROUP_BY
da det ikke tillader ikke-aggregerede kolonner, der ikke er navngivet i GROUP BY-sætningen.
2) MySQL version 5.1.40-fællesskab
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Derefter efter indstilling af 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)
Derefter efter indstilling af 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
Konklusion
Som du kan se, mislykkedes forespørgslen på version 5.0.45 og lykkes den/efter 5.1.40 og 5.5.28Før MySQL-versionen 5.1.10(ikke sikker)
forespørgsel uden GROUP BY
fejler uanset sql_mode ONLY_FULL_GROUP_BY
indstillet eller ej.
Nogle interessante fejl og sql_mode faq link
- ONLY_FULL_GROUP_BY sql-tilstand er alt for restriktiv
- sql-mode:kun fuld gruppe efter tilstand fungerer ikke
- MySQL 5.0 ofte stillede spørgsmål:Server SQL-tilstand