Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:SQL-Fehler:1140, SQLState:42000

Die folgende Abfrage ist mit ONLY_FULL_GROUP_BY ungültig aktiviert. Der erste ist ungültig, da der Name in der Auswahlliste nicht im GROUP BY genannt wird Klausel

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

ohne GROUP-Spalten ist illegal, wenn es keine GROUP BY-Klausel gibt

Sie können die Abfrage so umschreiben, dass sie problemlos als

funktioniert
mysql> SELECT name, MAX(age) FROM t GROUP BY name;

oder

Deaktivieren Sie ONLY_FULL_GROUP_BY und der Fehler sollte verschwinden.

Links können Ihnen helfen

  1. Sie können hier nach MySQL-Fehlern suchen
  2. gruppieren nach Funktionen
  3. ähnlicher Beitrag auf stackoverflow.com
  4. ein weiteres Forum, in dem ein ähnliches Problem diskutiert wird
  5. server-sql-mode

AKTUALISIEREN

Dies ist die Antwort auf Ihren Kommentar.

But i would like to know more about disabling the Group BY mode in mysql db.  

Server-SQL-Modi

  • Der MySQL-Server kann in verschiedenen SQL-Modi arbeiten und diese Modi je nach Wert von sql_mode für verschiedene Clients unterschiedlich anwenden Systemvariable. Diese Fähigkeit ermöglicht es jeder Anwendung, den Betriebsmodus des Servers an ihre eigenen Anforderungen anzupassen.

  • Um den SQL-Modus beim Serverstart festzulegen, verwenden Sie --sql-mode="modes" Option in der Befehlszeile oder sql-mode="modes" in einer Optionsdatei wie my.cnf (Unix operating systems) oder my.ini (Windows) . Modi ist eine durch Kommas getrennte Liste verschiedener Modi. Um den SQL-Modus explizit zu löschen, setzen Sie ihn mit --sql-mode="" auf eine leere Zeichenfolge auf der Befehlszeile oder sql-mode="" in einer Optionsdatei.

  • Um den SQL-Modus zur Laufzeit zu ändern, verwenden Sie ein

    SET [GLOBAL|SESSION] sql_mode='modes'
    Anweisung, um die Systemvariable sql_mode festzulegen. Das Setzen der GLOBAL-Variable erfordert das SUPER-Privileg und wirkt sich auf den Betrieb aller Clients aus, die sich ab diesem Zeitpunkt verbinden. Das Setzen der SESSION-Variable wirkt sich nur auf den aktuellen Client aus. Jeder Client kann seinen eigenen sql_mode-Wert für Sitzungen jederzeit ändern.

  • Verwenden Sie die folgenden Anweisungen, um den aktuellen globalen oder Sitzungs-sql_mode-Wert zu ermitteln:

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  • Sie können auf die sql_mode-Tabelle verweisen

I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.  

Dies geschieht aufgrund der MySQL-Version. Was ist die MySQL-Version Ihres lokalen Computers?

Wie überprüfe ich die MySQL-Version?

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28    |
+-----------+
1 row in set (0.00 sec)    

Zum Testen von sql_mode ONLY_FULL_GROUP_BY , habe ich die Tabelle patient erstellt mit zwei Spalten id, name und eingefügte Aufzeichnungen. Denken Sie an sql_mode ONLY_FULL_GROUP_BY ist nicht standardmäßig eingestellt, Sie müssen einstellen, wenn Sie möchten.

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  

Es schlug fehl, es hatte keinen Sinn, sql_mode auf ONLY_FULL_GROUP_BY zu setzen da es keine nicht aggregierten Spalten zulässt, die nicht in der GROUP BY-Klausel benannt sind.

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)  

Dann nach dem Setzen von 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)  

Dann nach dem Setzen von 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  

Fazit

Wie Sie sehen können, ist die Abfrage bei Version 5.0.45 fehlgeschlagen und bei/nach 5.1.40 und 5.5.28 vor der MySQL-Version 5.1.10(nicht sicher) Abfrage ohne GROUP BY schlägt unabhängig von sql_mode ONLY_FULL_GROUP_BY fehl eingestellt oder nicht.

Einige interessante Fehler und sql_mode FAQ-Link

  1. ONLY_FULL_GROUP_BY SQL-Modus ist zu restriktiv
  2. sql-mode:nur full group by mode funktioniert nicht
  3. MySQL 5.0 FAQ:Server-SQL-Modus