sql >> Database >  >> RDS >> Mysql

MySQL:SQL-fout:1140, SQLState:42000

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

  1. U kunt hier zoeken naar MySQL-fouten
  2. group-by-functions
  3. vergelijkbare post op stackoverflow.com
  4. een ander forum waar een soortgelijk probleem werd besproken
  5. 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.  

Server SQL-modi

  • 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, of sql-mode="modes" in een optiebestand zoals my.cnf (Unix operating systems) of my.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, of sql-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

  1. ONLY_FULL_GROUP_BY sql-modus is te beperkend
  2. sql-modus:alleen volledige groepering op modus werkt niet
  3. MySQL 5.0 FAQ:Server SQL-modus


  1. sql-query:hoe maak je de tags zonder kinderen om ouders te worden?

  2. Excel-gegevens importeren in mysql-database

  3. Een variabele declareren in een PostgreSQL-query

  4. Toon rijen uit MySQL waar een datetime binnen het volgende uur is