scireum research labs

information management made easy

Archiv für die 'Datenbanken' 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 »

MS-Access: Unix Timestamp in Datum konvertieren

Dienstag 11. März 2008 von mha

Eine Unix Timestamp ist eine Intergerzahl die, die Anzahl der Sekunden nach dem 01.01.1970 (Beginn des UNIX Zeitalters) enthält. Daher kann man diese Zahl auch recht einfach mit der Access Funktion DateAdd() in ein Datumsobjekt konvertieren.

DateAdd() erfordert drei Operatoren:

  • Das Intervall (in unserem Fall “s” für Sekunde)
  • Die Anzahl (in unserem Fall das Feld das die Timestamp enthält)
  • Das Startdatum (hier natürlich “01.01.1970″)
  • Der ganze Befehl (der im Feldnamen stehen muß) könnte so aussehen:
    Datum: DateAdd("s";[timestamp];"01.01.1970")

    Kategorie: Datenbanken, MS Access | Keine Kommentare »

    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 »