Följande fråga är ogiltig med ONLY_FULL_GROUP_BY
aktiverad. Den första är ogiltig eftersom namnet i urvalslistan inte är namngivet i GROUP BY
klausul
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
utan GROUP-kolumner är olagligt om det inte finns någon GROUP BY-sats
Du kan skriva om frågan så att den fungerar bra som
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
eller
Stäng av ONLY_FULL_GROUP_BY och felet borde försvinna.
Länkar kan hjälpa dig
- Du kan söka MySQL-fel här
- grupp-för-funktioner
- liknande inlägg på stackoverflow.com
- ett annat forum där liknande problem diskuterades
- server-sql-mode
UPPDATERA
Detta är svaret på din kommentar.
But i would like to know more about disabling the Group BY mode in mysql db.
-
MySQL-servern kan fungera i olika SQL-lägen och kan tillämpa dessa lägen på olika sätt för olika klienter, beroende på värdet på
sql_mode
systemvariabel. Denna funktion gör det möjligt för varje applikation att skräddarsy serverns driftläge efter sina egna krav. -
För att ställa in SQL-läget vid serverstart, använd
--sql-mode="modes"
alternativ på kommandoraden, ellersql-mode="modes"
i en alternativfil sommy.cnf (Unix operating systems)
ellermy.ini (Windows)
. lägen är en lista över olika lägen separerade med kommatecken. För att rensa SQL-läget explicit, ställ in det till en tom sträng med--sql-mode=""
på kommandoraden, ellersql-mode=""
i en alternativfil. -
För att ändra SQL-läge vid körning, använd en
SET [GLOBAL|SESSION] sql_mode='modes'
påstående för att ställa in systemvariabeln sql_mode. Att ställa in GLOBAL-variabeln kräver SUPER-behörighet och påverkar driften av alla klienter som ansluter från den tiden. Att ställa in variabeln SESSION påverkar endast den aktuella klienten. Vilken klient som helst kan ändra sitt eget sql_mode-värde när som helst. -
För att bestämma det aktuella globala värdet eller session sql_mode, använd följande satser:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Du kan hänvisa till sql_mode-tabellen
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Detta händer på grund av MySQL-versionen. Vad är MySQL-versionen av din lokala dator?
Hur kontrollerar jag MySQL-versionen?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
För att testa sql_mode ONLY_FULL_GROUP_BY
, Jag skapade tabellen patient
med två kolumner id, name
och infogade register. Kom ihåg sql_mode ONLY_FULL_GROUP_BY
är inte standardinställning, du måste ställa in om du vill.
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 misslyckades, det var ingen idé att ställa in sql_mode till ONLY_FULL_GROUP_BY
eftersom det inte tillåter icke aggregerade kolumner som inte är namngivna i GROUP BY-satsen.
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)
Sedan efter att ha ställt in 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)
Sedan efter att ha ställt in 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
Slutsats
Som du kan se misslyckades frågan på version 5.0.45 och lyckades på/efter 5.1.40 och 5.5.28Före MySQL-versionen 5.1.10(osäker)
fråga utan GROUP BY
misslyckas oavsett sql_mode ONLY_FULL_GROUP_BY
inställd eller inte.
Några intressanta buggar och sql_mode faq-länk
- ONLY_FULL_GROUP_BY sql-läget är alltför begränsat
- sql-läge:endast hel grupp efter läge fungerar inte
- MySQL 5.0 FAQ:Server SQL Mode