Abfrage über zwei Tabellen

Alles, was MySQL betrifft, kann hier besprochen werden.

Re: Abfrage über zwei Tabellen

Postby Nobbie » 31. August 2009 18:19

Genau - wunderbar.

Aber dann ist doch eigentlich klar, wie die GROUP Syntax funktioniert und wieso es nicht sinnlos ist, nur Felder selektieren zu können, die auch im GROUP BY angegeben wurden. Oder man bedient sich den Aggregat-Funktionen, um Maxima, Minima, Durchschnitt, Summe oder sonstwas aus den anderen Feldern zu generieren.

SQL selektiert keine "Datensätze", sondern SQL selektiert Felder aus Tabellen und erstellt daraus neue Tabellen. Es gibt eigentlich nur Tabellen.

Ein bekanntes (uraltes) Problem nennt sich die "Ermittelung des gruppenbezogenen Maximums" (oder Minimum - das ist natürlich egal). Ein Standard Problem ist dabei, man kann zwar einfach die gruppenbezogenen Maxima bestimmen, aber (und das ist der Knackpunkt, wo viele nicht begreifen, warum das nicht "einfach so" geht) man kann nicht einfach "den Datensatz" (bzw. den Primärkey) des Datensatzes bestimmen, der dieses Maximum birgt. Und dann versuchen eben viele, mit "ORDER BY" schon einmal eine "Vorsortierung" zu erzeugen (die aber gar nicht gemacht wird) um dann einfach blank die id mit zu selektieren - frei nach dem Motto: das muss "die doch sein". Muss aber nicht - und am offensichtlichsten leuchtet es dann ein, wenn beispielsweise das Maximum gar nicht eindeutig ist, weil mehr als ein Datensatz den gleichen (größten) Wert dort haben.

EIn SELECT stellt immer nur Tabellenfelder zur Verfügung, und der Bezug zum einzelnen Datensatz geht bei einer Gruppierung verloren. Weil die Datensätze, die in diesem Kriterium übereinstimmen, zusammengeführt werden - aber wie führt man Datensätze zusammen in Spalten, die verschiedene Werte haben (wie es bei der id garantiert der Fall ist)? Das geht eben nicht und deswegen gibt ANSI SQL dort einen SQL Fehler aus (und anscheinend ACCESS ebenfalls, ich habe hier kein ACCESS). Das ist richtig, die Funktion von MySQL, die Syntax zu akzeptieren, aber dafür "irgendeinen" Wert aus der Gruppe zu wählen, finde ich nicht gut. Das führt zu fehlerhaften Funktionen, und ein Script, was auf dem einen Rechner funktioniert, läuft auf einem anderen Rechner auf einmal fehlerhaft, weil dort die GROUP BY Anweisung einen anderen Wert zur Verfügung stellt (warum auch immer) - da ist die schiere Verzweiflung vorprogrammiert...
Nobbie
 
Posts: 6491
Joined: 09. March 2008 13:04

Previous

Return to MySQL

Who is online

Users browsing this forum: No registered users and 1 guest