scireum research labs

information management made easy

Archiv für die 'SQL' Kategorie

Doppelte Datensätze in einer Tabelle mit SQL finden

Sonntag 16. März 2008 von mha

Oftmals bekommt man Daten unterschiedlichster Art in Tabellenform geliefert und möchte schnell prüfen, ob die Daten keine Duplikate beinhalten.
Gegeben sei eine Artikeltabelle products mit den Feldern:
supplier | supplier_aid | Description | usw. usw.
Sollte selbstverständlich über den Schlüssel supplier, supplier_aid (Lieferant und Werksnummer) eindeutig sein.
Dies prüft man mit folgendem Ausdruck:
SELECT supplier, supplier_aid from products GROUP BY supplier, supplier_aid HAVING count(supplier_aid) >1
WICHTIG! Man muß die Bedingung in die HAVING Klausel stecken und nicht in die WHERE Klausel, da diese vor dem Gruppieren greifen würde.

Ist das Resultset leer, sind alle Datensätze eindeutlig, ansonsten werden die Duplikate angezeigt.

Kategorie: Datenbanken, SQL, Stammdaten | 1 Kommentar »

Arbeiten mit Ergebnismengen in SQL, Teil 3: MINUS

Montag 10. März 2008 von mha

Mit Hilfe des MINUS Operators kann man zwei Ergebnismengen kombinieren. Dabei werden bei MINUS alle Ergebnistuppel ausgegeben, die in der ersten, nicht aber in der zweiten der kombinierten Ergebnismengen enthalten sind.
WICHTIG!
Die Felder der Ergebnismengen müssen die selben Datentypen verwenden. Die Feldnamen werden aus der ersten Ergebnismenge übernommen. Ergebnistuppel welche in der zweiten Abfrage enthalten sind, jedoch nicht in der ersten vorkommen, werden ignoriert.

Beispiel: Es gebe 2 Tabellen mit Vereinsmitgliedern, als Ergebnis soll eine Liste mit allen Mitgliedern die in beiden Vereinen aktiv sind ausgegeben werden:

Tabelle: Schachclub
Name
Peter
Tom
Andy
Johann
Gerald

Tabelle: Tennisclub
Name
Michael
Peter
Andy
Roland

Die Abfrage:

SELECT Name FROM Schachclub MINUS SELECT Name FROM Tennisclub

liefert folgendes Ergebnis:
Name
Tom
Johann
Gerald

Kategorie: Datenbanken, SQL | Keine Kommentare »

Arbeiten mit Ergebnismengen in SQL, Teil 2: INTERSECT

Montag 10. März 2008 von mha

Mit Hilfe des INTERSECT Operators kann man zwei Ergebnismengen kombinieren. Dabei werden bei INTERSECT alle Ergebnistuppel ausgegeben die in allen der kombinierten Ergebnismengen enthalten sind.
WICHTIG!
Die Felder der Ergebnismengen müssen die selben Datentypen verwenden. Die Feldnamen werden aus der ersten Ergebnismenge übernommen.

Beispiel: Es gebe 2 Tabellen mit Vereinsmitgliedern, als Ergebnis soll eine Liste mit allen Mitgliedern die in beiden Vereinen aktiv sind ausgegeben werden:

Tabelle: Schachclub
Name
Peter
Tom
Andy
Johann
Gerald

Tabelle: Tennisclub
Name
Michael
Peter
Andy
Roland

Die Abfrage:

SELECT Name FROM Schachclub INTERSECT SELECT Name FROM Tennisclub

liefert folgendes Ergebnis:
Name
Andy
Peter

Kategorie: Datenbanken, SQL | Keine Kommentare »

Arbeiten mit Ergebnismengen in SQL, Teil 1: UNION

Montag 10. März 2008 von mha

Mit Hilfe des UNION Operators kann man zwei Ergebnismengen kombinieren. Dabei werden bei UNION alle Ergebnistuppel ausgegeben die in einer der kombinierten Ergebnismengen enthalten sind.
WICHTIG!
Die Felder der Ergebnismengen müssen die selben Datentypen verwenden. Die Feldnamen werden aus der ersten Ergebnismenge übernommen.

Beispiel: Es gebe 2 Tabellen mit Vereinsmitgliedern, als Ergebnis soll eine Liste mit allen Mitgliedern beider Vereine ausgegeben werden:
Tabelle: Schachclub
Name
Peter
Tom
Andy
Johann
Gerald

Tabelle: Tennisclub
Name
Michael
Peter
Andy
Roland

Die Abfrage:
SELECT Name FROM Schachclub UNION SELECT Name FROM Tennisclub

liefert folgendes Ergebnis:
Name
Andy
Gerald
Johann
Michael
Peter
Roland
Tom

Mit UNION ALL werden alle Ergebnistuppel (auch doppelte) aller Teilmengen ausgegeben:
SELECT Name FROM Schachclub UNION ALL SELECT Name FROM Tennisclub

liefert also:
Name
Andy
Andy
Gerald
Johann
Michael
Peter
Peter
Roland
Tom

Kategorie: Datenbanken, SQL | Keine Kommentare »