SQL-Abfrage Duplikate suchen
Sonic
- datenbank
Hallo,
hat jemand eine Idee wie man Duplikate in einer SQL-Datenbank finden könnte?
Unter Duplikaten verstehe ich bestimmte Feldkombinationen, wie z.B. Name und Telefon sind gleich, oder Name und Email-Adresse sind gleich usw.
Kein Duplikat wäre z.B. Vorname und Geschlecht.
Also, es sollen Datensätze angezeigt werden, bei denen bestimmte Daten gleich sind.
Danke
Sonic
Hello,
hat jemand eine Idee wie man Duplikate in einer SQL-Datenbank finden könnte?
Mit einem Selbstbezug.
select distinct a.id, a.name, from $tabelle as a, $tabelle as b where a.name = b.name and a.id <> b.id;
Ich hoffe, dass es so stimmt.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
select distinct a.id, a.name, from $tabelle as a, $tabelle as b where a.name = b.name and a.id <> b.id;
Danke, aber ich habe nur eine Tabelle. Das ist das Problem.
Hello,
select distinct a.id, a.name from $tabelle as a, $tabelle as b where a.name = b.name and a.id <> b.id order by name, id;
Danke, aber ich habe nur eine Tabelle. Das ist das Problem.
Siehst Du da irgendwo eine Eingabemöglichkeit für zwei Tabellennamen?
War auch noch ein Tippfehler drin.
Hab's inzwischen ausprobiert und es funktioniert gut.
Man kann das auch noch erweitern mit einer Soundex-Funktion oder mit LIKE und natürlich mit mehr Feldern, die gegeneinander abgeglichen werden
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
select distinct a.id, a.name from $tabelle as a, $tabelle as b where a.name = b.name and a.id <> b.id order by name, id;
An deiner Idee scheint was dran zu sein. Muss noch mal testen. Danke
echo $begrüßung;
hat jemand eine Idee wie man Duplikate in einer SQL-Datenbank finden könnte?
Also, es sollen Datensätze angezeigt werden, bei denen bestimmte Daten gleich sind.
Gruppiere nach den bestimmten Daten und hänge ein HAVING count(*) > 1 hinter die Gruppierungsklausel.
echo "$verabschiedung $name";
Gruppiere nach den bestimmten Daten und hänge ein HAVING count(*) > 1 hinter die Gruppierungsklausel.
Mit HAVING count(*) > 1 geht es nicht. Ich habe gerade die Lösung von Tom ausprobiert und es klappt wunderbar. Danke!
echo $begrüßung;
Mit HAVING count(*) > 1 geht es nicht.
Welches DBMS und welche Version möchtest du nutzen? Ansonsten ist die Aussage so nicht brauchbar, oder du hast einen Fehler in deinem Statement:
SELECT ... FROM tabelle [WHERE ...] GROUP BY feld1, feld2 HAVING count(*) > 1 [ORDER BY ...]
hab ich grad gestern wieder verwendet und funktioniert unter Informix wunderbar. []-Teile sind optional und wenn sie verwendet werden an dieser Stelle einzusetzen.
echo "$verabschiedung $name";
SELECT ... FROM tabelle [WHERE ...] GROUP BY feld1, feld2 HAVING count(*) > 1 [ORDER BY ...]
hab ich grad gestern wieder verwendet und funktioniert unter Informix wunderbar. []-Teile sind optional und wenn sie verwendet werden an dieser Stelle einzusetzen.
Ich benutze keine Eingabefelder, deshalb geht es mit WHERE schon mal nicht...
echo $begrüßung;
SELECT ... FROM tabelle [WHERE ...] GROUP BY feld1, feld2 HAVING count(*) > 1 [ORDER BY ...]
hab ich grad gestern wieder verwendet und funktioniert unter Informix wunderbar. []-Teile sind optional und wenn sie verwendet werden an dieser Stelle einzusetzen.
Ich benutze keine Eingabefelder, deshalb geht es mit WHERE schon mal nicht...
WHERE und ORDER BY waren nur als Beispiel in der Abfrage. Wenn du diese beiden Klauseln nicht brauchst, lass sie weg.
echo "$verabschiedung $name";
Hello,
Gruppiere nach den bestimmten Daten und hänge ein HAVING count(*) > 1 hinter die Gruppierungsklausel.
Das war auch meine erste Idee, aber die ist für eine praxisgerechte Nutzung nicht brauchbar. Da findet man nur die Datensätze mit identischen Einträgen. Bei der Doublettensuche sollte man allerdings auch die Möglichkeit von kleinen Schreibfehlern oder teilweiser Gleichkeit berücksichtigen. Es wird also eigentlich meistens keine Gleichheit, sondern nur Ähnlichkeit gesucht.
Ich hatte da mal ein dBase ein recht ausgefuchstes Progrmm für sowas geschrieben. Das war erst brauchbar, nachdem es Festplatten gab :-)) Aber dann hat es seinen Dienst gut getan und der (damals nagelneue) IBM8086 hat die ganze nacht gebraucht, um aus ca. 20.000 Datensätzen die 350 doppelten oder ähnlichen herauszusuchen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom