sql >> Databasteknik >  >> RDS >> Mysql

MySQL:SQL-fel:1140, SQLState:42000

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

  1. Du kan söka MySQL-fel här
  2. grupp-för-funktioner
  3. liknande inlägg på stackoverflow.com
  4. ett annat forum där liknande problem diskuterades
  5. 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.  

Server SQL-lägen

  • 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, eller sql-mode="modes" i en alternativfil som my.cnf (Unix operating systems) eller my.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, eller sql-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

  1. ONLY_FULL_GROUP_BY sql-läget är alltför begränsat
  2. sql-läge:endast hel grupp efter läge fungerar inte
  3. MySQL 5.0 FAQ:Server SQL Mode


  1. Topp fem mjukvaruapplikationer för åtkomst till MySQL/MariaDB-servrar

  2. Android Room - Hur man återställer automatisk genererad tabell primärnyckel vid varje appkörning

  3. PHP MySQL-fråga som innehåller nyckelord/reserverade ord

  4. Infoga filinnehållet i MySQL-tabellens kolumn