1.9k Aufrufe
Gefragt in Datenbanken von
Ich habe 2 Tabellen und in jeweils einer Spalte die E-Mail-Adressen. Diese müssen nun abgeglichen werden und in einer Tabelle müssen die rausgelöscht werden, welche in der anderen Tabelle vorhanden sind. Also Tabelle 1 alle Adressen, Tabelle 2 Adressen, welche in Tabelle 1 gelöscht werden sollen. Und zwar anhand der E-Mail-Adresse.

4 Antworten

0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo,

mein Vorschlag:

- Kopiere die Adressen in eine gemeinsame Tabelle und lasse sie nach der E-Mail-Spalte aufsteigend sortieren
- Füge in einer Hilfs-Spalte in der Zeile mit dem zweiten Datensatz folgende Formel ein: =WENN(E3=E2;1;"") und kopiere sie nach unten. In dieser Formel wird davon ausgegangen, dass die Spalten Überschriften haben und sich die E-Mail-Adressen in der Spalte "E" befinden, das musst du natürlich entsprechend anpassen.
- Alle mehrfach vorhandenen Datensätze sind in der Hilfs-Spalte durch eine "1" gekennzeichent.
- Markiere die Hilfsspalte, dann Kopieren, Inhalte einfügen -> Werte um die Formeln zu entfernen und nur noch die Einsen zu behalten. Nun noch die Hilfsspalte aufsteigend sortieren lassen und den Block der mit "1" markierten Datensätze löschen.

In Ergebnis hast du nun eine Tabelle welche keine doppelten E-Mail-Adressen mehr enthält, aber alle Adressen, die zuvor in Tabelle 1 oder auch 2 enthalten waren.

Gruß
Kalle
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo,

da bin ich jetzt irgendwie von Excel ausgegangen, das ist aber hier die Gruppe 'Datenbanken'.

Aber auch da könntest du die Tabellen nach Excel exportieren und wie oben beschrieben vorgehen um die Doppelungen zu identifizieren und dann händisch in der DB zu löschen.

Gruß
Kalle
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Kalle und Fragesteller,

Zusatzinfo:
Sollte es sich um Access handeln, was aus der Anfrage nicht eindeutig hervorgeht, wäre es mittels Abfrage möglich Doppelgleisigkeiten durch Gruppierung zu eliminieren.

schönen Tag noch
mit Gruß

Paul1
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo,
hier nochmal eine SQL-Variante (mit Access2000 getestet) als
Anregung.

EmailTab sei Tabelle1,
TabEmailLoeschen sei Tabelle2.

EmailTab enthält bei mir im Feld email:
kalle@tester.com
marvin@nervig.com
r@ruessel.de
n@nervig.com


TabEmailLoeschen enthält bei mir im Feld email:
g@tester.com
k@nervig.com
n@nervig.com
marvin@nervig.com


Mit der Löschabfrage:
DELETE [email]
FROM EmailTab AS T1
WHERE [T1].[email]=(SELECT [email] FROM TabEmailLoeschen
WHERE [T1.email]=email);
lösche ich:
marvin@nervig.com
n@nervig.com


Die anderen:
g@tester.com
k@nervig.com
sind früher schon mal rausgeflogen.

Wenn du Teile der Emailaddresse vergleichen willst, brauchst du
eine Funktion, die du in der SQL-Anweisung aufrufen kannst.
In Access legt man in einem Modul eine VBA-Funktion an, die einen
Wert zurück liefert.
Ich habe als Beispiel eine Funktion, die alles nach dem @
zurückgibt (also die Domäne).

Function mailaddr(addr As String)
Pos1 = InStr(1, addr, "@", 0)
mailaddr = Right(addr, Len(addr) - Pos1)
End Function


In der Tabelle TabEmailDomäneLoeschen habe ich im Feld
email nur nervig.com.
Mit der Löschabfrage:
DELETE *
FROM EmailTab AS T1
WHERE mailaddr([T1].[email])=
(SELECT email FROM TabEmailDomäneLoeschen WHERE
mailaddr([T1].[email]) = email );
lösche ich dann:
marvin@nervig.com
n@nervig.com


HTH
...