ERROR 1140
Christian
- datenbank
Nabend,
ich habe eine Datenbank mit verschiedenen Tabellen. Dort soll ich das Maximum der Spalte "UESatz" herausfinden. Das habe ich mit:
SELECT Name, MAX(UESatz) AS "max UESatz" FROM t_dozent;
erreicht.
Meine MySQL-Version ist: mysql Ver 14.14 Distrib 5.1.30, for Win32 (ia32)
Ich verwende XAMPP.
Exakt derselbe Query funktioniert aber bei einem Freund nicht. Er hat eine andere MySQL-Version (mysql Ver 14.12 Distrib 5.0.24a, for Win32 (ia32)), die bei ihm in der Schule verwendet wird. Ihm wird bei gleichen Query die Fehlermeldung:
[root@localhost:3306] ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Ich habe dann einmal gesucht und auf der MySQL-Webseite etwas gefunden: http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html
Dort gibt es ein Beispiel:
Note the use of GROUP BY to group all records for each owner. Without it, all you get is an error message:
mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause
Doch ironischerweise funktioniert dieser Query bei mir auch ohne Probleme, obwohl ich doch MySQL 5.1 habe...
Was stimmt da nicht?
Danke,
Gruß
Christian
Also ich habe jetzt grad noch folgendes gefunden:
If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.
auf http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html gefunden.
Nun habe ich ihm mal diesen Query geschickt:
SELECT MAX(UESatz) AS "max UESatz", Name FROM t_dozent GROUP BY NULL;
und es funktioniert.
Kann das an einer MySQL Option liegen, oder war das "damals" immer so?
Danke,
Gruß
Christian
Hallo,
Nun habe ich ihm mal diesen Query geschickt:
SELECT MAX(UESatz) AS "max UESatz", Name FROM t_dozent GROUP BY NULL;
und es funktioniert.
Und ist sowas von "falsch" ... Begründungen dazu findest du hier im Archiv zuhauf. Die Stichworte zum Suchen hast du ja bereits.
ich habe eine Datenbank mit verschiedenen Tabellen. Dort soll ich das Maximum »» der Spalte "UESatz" herausfinden. Das habe ich mit:
SELECT Name, MAX(UESatz) AS "max UESatz" FROM t_dozent;
erreicht.
Übersetzt man deine umgangssprachliche Abfrage "Dort soll ich das Maximum »» der Spalte "UESatz" herausfinden." richtig nach SQL (ANSI Standard SQL) würde sie lauten
SELECT MAX(UESatz) FROM t_dozent
nach mehr hast du nicht gefragt.
Übersetzt man deine SQL Abfrage "falsch" ins umgangssprachliche
"Für den maximalen Wert für die Spalte "UESatz" und dazu den Wert aus der Spalte "Namen" welcher zum selben Datensatz gehört."
Die/Eine richtige Übersetzung davon nach SQL wäre:
SELECT Name, UESatz
FROM t_dozent
WHERE UESatz = (SELECT MAX(UESatz) FROM t_dozent)
Deine Variante bringt mindestens dann Probleme wenn es zwei Einträge mit dem maximalen UESatz in der Tabelle gibt, für Erna und Heinz. Welchen der beiden Namen soll es denn dann anzeigen und warum?
Das, was du treibst, wird eigentlich nur von MySql erlaubt. Jedes andere RDBMS würde dir die Abfrage weiterhin um die Ohren hauen und das wäre auch gut so. Gewöhne dir bitte korrektes SQL an.
Ciao, Frank