next up previous index
Weiter: 2 Base-Datenbankfunktionen - Basiswissen Hoch: 7 Kurzeinführung in SQL Zurück: 7 Sortieren der Ergebnisdaten

8 Anwendung des DISTINCT-Befehls in der SQL-Abfrage

Bei Abfragen kann es vorkommen, dass Duplikate in den Ergebnisdatensätze auftreten, die es - je nach Anwendungsfall - zu vermeiden gilt.

Als Beispiel dient wieder die Bestellverwaltung. Es soll ermittelt werden, welche Kunden bereits Bestellungen getätigt haben. Hierzu wird die in Abb. 1.54 links oben gezeigte Abfrage benutzt.

SELECT Kunde.KdNr, Kunde.Name, Kunde.Vorname 
   FROM Kunde, Bestellung
      WHERE Kunde.KdNr = Bestellung.KdNr

Im Ergebnis der Abfrage sehen Sie aber das Problem: Es gibt Kunden, die mehrere Bestellungen getätigt haben - es treten also Dubletten auf. Diese Dubletten müssen vermieden werden, da ja nicht die Bestellungen, sondern die Kunden mit Bestellungen abzufragen sind. Dies wird mit der modifizierten Abfrage aus Abb. 1.54 (rechts unten) demonstriert. Dort wurde das Schlüsselwort DISTINCT hinzugefügt.

SELECT DISTINCT Kunde.KdNr, Kunde.Name, Kunde.Vorname 
   FROM Kunde, Bestellung 
      WHERE Kunde.KdNr = Bestellung.KdNr

Der SQL-Parser erkennt dies und filtert alle Datensätze, die identische Ergebnisse aufweisen, aus der Ergebnistabelle heraus.

\begin{figure}\htmlimage
\spfiglii{0.43}{Bld20_49.eps}{Schaltfläche zum Einblenden des DISTINCT-Parameters}{_Ref63846643}
\end{figure}

Beachten Sie, dass diese Filterung nur klappt, wenn alle Feldinhalte der betreffenden Ergebnisdatensätze gleich sind. Wird die obige Abfrage z.B. um das Feld BestNr ergänzt, klappt das Filtern der Dubletten nicht mehr, da die Bestellnummern sich bei den einzelnen Bestellungen eines Kunden unterscheiden.

\begin{figure}\htmlimage
\spfiglii{0.90}{Bld20_48.eps}{Ausfiltern identischer Datensätze mit DISTINCT}{_Ref63754630}
\end{figure}

Hinweis: Abhängig von der unterlagerten Datenbank sind weitere SQL-Abfragen über den SELECT-Befehl möglich. Bei einigen Datenbanken lassen sich SELECT"=Befehle beispielsweise schachteln, um komplexere Abfragen (z.B. "`liefere alle Kunden, die keine Bestellungen getätigt haben"') auszuführen. Die von OpenOffice.org Base benutzte HSQL-Datenbank erlaubt in der dem Autor vorliegenden Fassung sind solche Abfragen nicht.


next up previous index
Next: 2 Base-Datenbankfunktionen - Basiswissen Up: 7 Kurzeinführung in SQL Previous: 7 Sortieren der Ergebnisdaten
Nicolaus Millin
2007-08-11