![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: ZeosLib
MySQL doppelte Datensätze anzeigen...
Ich habe eine Kundendatenbank mit ca. 5000 Datensätzen, aus denen ich doppelte Einträge herausfiltern kann. Dazu nutze ich diese Abfrage...
SQL-Code:
Ich erhalte auch die doppelten Einträge, allerding sind gelegentlich auch einfach nur einmal vorhandene Einträge aufgeführt.
SELECT * FROM tblkunden WHERE Nachname != '' AND Vorname != '' AND Nachname IS NOT NULL AND Vorname IS NOT NULL
AND (Nachname IN (SELECT Nachname FROM tblkunden GROUP BY Nachname, Vorname HAVING count(Nachname) > 1) AND (Vorname IN (SELECT Vorname FROM tblkunden GROUP BY Vorname, Nachname HAVING count(Vorname) > 1))) ORDER BY Nachname, Vorname; Hier mal das Result der Abfrage: NACHNAME + VORNAME ------------------- Mustermann + Klaus Mustermann + Klaus Musterberg + Bernd (falsch, gibt es nicht doppelt, wird aber angezeigt) Musterfrau + Manfred Musterfrau + Manfred Muster + Klaus (falsch, gibt es nicht doppelt, wird aber angezeigt) Ich vermute, dass ich einfach eine "Kinke" in meiner Abfrage habe und den Wald vor lauter Bäumen einfach nicht durchblicken kann. |
Re: MySQL doppelte Datensätze anzeigen...
Probiers mal damit:
SQL-Code:
SELECT Nachname, Vorname, Count(Nachname) FROM tblkunden
GROUP BY Nachname, Vorname HAVING Count(Nachname) > 1 |
Re: MySQL doppelte Datensätze anzeigen...
Warum arbeitest du mit Subselects... Probiers doch einfach mal so:
SQL-Code:
In deiner Abfrage ist sogar noch ein logischer Fehler drin, wenn ich das richtig sehe. Denn hast du 2 Wagener in deiner Tabelle, mit unterschiedlichen Vornamen (Marc und Toni), so kann dir deine Abfrage den Wagener trotzdem als doppelt liefern, und zwar dann, wenn noch irgendeine andere, dritte PErson, den Vornamen Marc oder Toni hat.
select Nachname, Vorname, count(*) as N from tblkunden group by Nachname, Vorname having count(*) > 1
|
Re: MySQL doppelte Datensätze anzeigen...
Dann bekomme ich ja nur die Anzahl der doppelten Treffer, ich benötige aber eine vollständige Übersicht der doppelten Einträge (inkl. Straße, PLZ, Ort etc.), damit der Anwender entscheiden kann, welcher Datensatz der falsche ist!
|
Re: MySQL doppelte Datensätze anzeigen...
Dann könntest du versuchen, über einen SELF JOIN die Informationen zu finden:
SQL-Code:
So in der Art.
SELECT a.Nachname, a.Vorname, a.Ort, a.Strasse,
COUNT(b.Id) AS Anzahl FROM tblkunden a LEFT JOIN tblkunden b ON a.Nachname=b.Nachname and a.Vorname=b.Vorname GROUP BY a.Nachname, a.Vorname, a.Ort, a.Strasse HAVING COUNT(b.Id)> 1 |
Re: MySQL doppelte Datensätze anzeigen...
Hm, jetzt wird es komisch... folgendes Phänomen mit dieser Abfrage...
SQL-Code:
werden mir die Daten so angezeigt
SELECT a.Nachname, a.Vorname, a.Ort, a.Strasse
FROM tblkunden a LEFT JOIN tblkunden b ON a.Nachname=b.Nachname and a.Vorname=b.Vorname WHERE a.Nachname != '' AND a.Vorname != '' AND a.Nachname IS NOT NULL AND a.Vorname IS NOT NULL AND b.Nachname != '' AND b.Vorname != '' AND b.Nachname IS NOT NULL AND b.Vorname IS NOT NULL GROUP BY a.Nachname, a.Vorname, a.Ort, a.Strasse HAVING COUNT(a.Nachname) > 1 NACHNAME - VORNAME Mustermann - Klaus Mustermann - Klaus Muster - Frank Musterfrau - Gerd Musterfrau - Gerd soweit, so gut... MUSTER FRANK wird mir nur einmal angezeit, befindet sich wie alle anderen Einträge aber auch doppelt in der Datenbank. MUSTERMANN KLAUS und MUSTERFRAU GERD sind doppelt drin und werden korrekt angezeigt... was nun, was geht da vor, was mache ich da falsch? |
Re: MySQL doppelte Datensätze anzeigen...
Also, damit nochmal klar wird, was ich möchte und wo mein Problem liegt...
Ich habe eine Kundendatenbank mit ca. 5000 Datensätzen und möchte mir in meiner Anwendung alle doppelten Datensätze anzeigen. Ich will nicht die Anzahl der doppelten Datensätze wissen, sondern ich will die doppelten Datensätze komplett sehen, damit ich entscheiden kann, welcher Datensatz gelöscht werden kann. Das soll dann tabellarisch so aussehen... NACHNAME - VORNAME ------------------ Mustermann - Tom Mustermann - Tom Musterfrau - Gerda Musterfrau - Gerda Wie muss ich dafür die SQL-Abfrage aufbauen? Wie wäre der Lösungsansatz am besten anzugehen?! Ich finde zur Zeit einfach nicht den richtigen Lösungsansatz! |
Re: MySQL doppelte Datensätze anzeigen...
Versuch es mal so:
SQL-Code:
SELECT A.Name,A.Vorname
FROM tblkunden A JOIN tblkunden B ON B.Name = A.Name AND B.Vorname = A.Vorname GROUP BY A.Name,A.Vorname HAVING COUNT (*) > 1 |
Re: MySQL doppelte Datensätze anzeigen...
Mit der Abfrage...
SQL-Code:
bekomme ich leider nur den doppelten Eintrag angezeigt, nicht beide bzw. alle doppelten, wie ich es benötige...
SELECT A.Nachname,A.Vorname
FROM tblkunden A JOIN tblkunden B ON B.Nachname = A.Nachname AND B.Vorname = A.Vorname GROUP BY A.Nachname,A.Vorname HAVING COUNT(*) > 1 |
Re: MySQL doppelte Datensätze anzeigen...
Dann mußt du nun den Rest dazujoinen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz