BEISPIEL
Sie verknüpfen zwei Tabellen
Tabelle1
und
Tabelle2
miteinander, ohne eine Beziehung über die WHERE-
Klausel herzustellen.
Tabelle1 Tabelle2
Mit der Abfrage:
SELECT *
FROM
Tabelle1, Tabelle2
erhalten Sie folgendes Abfrageergebnis:
Abbildung 8.102 Abfrageergebnis
Also Augen auf beim Erstellen der SQL-Anweisung!
Wie lösche ich doppelte Datensätze aus einer Tabelle?
Eigentlich dürfte es nicht zu diesem Zustand kommen, da dies gegen die Grundregeln relationaler Daten-
banken verstößt. Jeder Datensatz muss eindeutig identifizierbar sein, wie sonst wollen Sie mit SELECT xyz
den gewünschten Datensatz aufrufen? Grundsätzlich sollte es nicht so weit kommen, dass in der Datenbank
redundante Informationen gespeichert werden.
Doch wie immer unterscheiden sich Theorie und Praxis voneinander. Gehen wir also davon aus, dass Sie in
der Tabelle Import einige doppelte Datensätze vorfinden:
503
Tipps & Tricks
BEISPIEL
BEISPIEL
Kapitel 8: SQL in Theorie und Praxis
Abbildung 8.103 Datensätze der Tabelle Import
Was ist zu tun? Mit
DELETE FROM Import WHERE name = 'Hase' AND vorname = 'Max'
werden Sie kaum weiterkommen, es werden alle betreffenden Datensätze gelöscht, nicht nur die doppelten.
Zum korrekten Löschen der Duplikate bieten sich mehrere Weg an, wir wollen Ihnen zwei davon vor-
stellen.
Temporäre Tabelle
Wir exportieren zunächst eine Liste (ohne Duplikate) der Datensätze in eine temporäre Tabelle, löschen die
Ursprungstabelle und benennen die Tabelle um. Dabei handelt es sich um drei einzelne SQL-Anweisungen.
SELECT DISTINCT * INTO TempImport FROM Import
Löschen der Ursprungstabelle:
DROP TABLE Import
Zurückkopieren der Temporärtabelle (mit Jet-SQL können Sie Tabellen nicht umbenennen):
SELECT * INTO Import FROM TempImport
Eindeutiges Feld
Die zweite Variante basiert darauf, zunächst ein eindeutiges Feld
Id
(Zählerfeld) der Tabelle hinzuzufügen.
Auf diese Weise sind auch einzelne Datensätze für SQL-Anweisungen adressierbar. Nachfolgend werden alle
Datensätze gesucht, deren
Id
größer als die kleinste
Id
bei gleichen Datensätzen ist, d.h., von n doppelten
Datensätzen verbleibt nur der Datensatz mit der kleinsten
Id
.
Ändern des Tabellenlayouts:
ALTER TABLE Import ADD COLUMN Id COUNTER
Löschen der Duplikate:
DELETE FROM Import i1 WHERE i1.id > (SELECT MIN(i2.id) FROM Import i2
WHERE (i1.name=i2.name) AND (i1.vorname=i2.vorname))
Nachfolgend könnten Sie das Zählerfeld ja wieder löschen, es ist jedoch empfehlenswert, dieses gleich als Pri-
märschlüssel zu »missbrauchen«.
504

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.