Sven Rautenberg: Beispieldaten gesucht

Beitrag lesen

Moin!

select autor.name, buch.name
from autor, buch
where autor.id = buch.autor
group by autor.name

Dann bekomme ich ja nur noch einen Eintrag zurückgeliefert. Ist es der erste oder der letzte Eintrag?

Das ist nicht definiert - jedes andere Datenbanksystem außer MySQL hätte dir auch eine Fehlermeldung geliefert.

Grundsätzlich: Wenn du gruppierst, darfst du nach SELECT nur folgende Spalten aufführen:
1. Alle die, die nach GROUP BY explizit genannt sind
2. Alle anderen, auf die du eine Aggregatfunktion anwendest (SUM, COUNT, MAX, MIN,...)

Warum geht eingentlich folgende Abfrage nicht:

select autor.Vorname, autor.Nachname, buch.Titel
from buch, autor
where autoren.id = buch.autor
order by autoren.Nachname
group by autoren.Nachname

Stören tut hier die "order by"-Zeile. Ich dachte ich könnte dadurch die Ausgabe sortieren.

Die Reihenfolge der SQL-Kommandos ist festgelegt und nicht frei wählbar. ORDER BY gehört immer hinter GROUP BY.

Abgesehen davon hast du hier beim Gruppieren das gleiche Problem, wie weiter oben: Du fragst Vorname, Nachname und Buchtitel ab, gruppierst aber nur nach Nachname. Dadurch kriegst du als Ergebnis für Vorname und Buchtitel beliebige Werte.

Blöd, wenn du "Mann, Thomas, Die Buddenbrooks" und "Mann, Heinrich, Der Untertan" in deiner Datenbank hast. Die Gruppierung würde auf "Mann" wirken, und sich einen beliebigen Vornamen und einen beliebigen Buchtitel raussuchen.

Du könntest also auch erhalten: "Mann, Heinrich, Die Buddenbrooks", oder umgekehrt "Mann, Thomas, Der Untertan".

Und da Familie Mann recht schriftstellerisch war, gäbe es noch tausende beliebige weitere Zuordnungsfehler, die deine Datenbank machen würde, weil du falsch gruppierst.

- Sven Rautenberg

--
"Love your nation - respect the others."