Announcement

Collapse
No announcement yet.

SQL - Duplikate finden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL - Duplikate finden

    Hi Entwicklerssss

    Wie ihr evtl. seht, bin ich neu hier. - Ich habe keine Erfahrungen bzw. sehr kleine Erfahrungen mit SQL und muss mich aber damit beschäftigen. Folgendes Problem

    In einer DB habe ich eine Tabelle - die ist in etwas so aufgebaut:

    Referenznr/Name/Vorname/Geburtsdatum/Geschlecht - -usw usw. usw.

    Jetzt muss ich die Tabelle prüfen, ob es Duplikate hat - das heisst, ob der Name, der Vorname und das Geburtsdatum übereinstimmen. Diese Daten muss ich vorübergehend nicht löschen, sondern einfach anzeigen lassen. Da ich keine Ahnung von SQL habe, weiss ich nicht wie ich dies anstellen soll. Was ich weiss wie ich eine leere Abfrage öffnen kann - und soweit bin ich - aber weiter nicht...

    Ich danke euch im Voraus für die Hilfe

  • #2
    mit diesem Befehl, habe ich herausgefunden wie ich alle Einträge in meiner Tabelle anzeigen lassen kann - also alle Einträge mit den Feldern die ich brauche (Name, Vorname, Geburtsdatum und Geschlecht) - jetzt sollte ich nur noch wissen wie ich nur die Einträge anzeigen lassen kann - die zweimal dieselbe Einträge haben. Beispiel:

    Müller Peter - 01.01.1990 - m
    Müller Peter - 01.01.1990 - m

    Will nur solche Einträge sehen....

    Comment


    • #3
      probiere mal das:

      select Name, Vorname, Geburtsdatum, Geschlecht, count(*) as Anzahl from Tabelle
      group by Name, Vorname, Geburtsdatum, Geschlecht having count(*) > 1

      bye,
      Helmut

      Comment


      • #4
        klappt leider nicht - folgenden Fehler:

        Meldung 156, Ebene 15, Status 1, Zeile 2
        Falsche Syntax in der Nähe des 'having'-Schlüsselwortes.

        Comment


        • #5
          habe den Fehler gefunden - hatte ein KOMMA zuviel hinzugefügt. Ein erster Schritt ist getan - ich sehe jetzt welche Namen dass doppelt, dreifach, 100fach, usw. geführt sind. Kann ich jetzt die ganze Tabelle so reduzieren, dass immer nur ein Eintrag bleibt - bzw. wenn ich eben doppelte usw habe. dass die doppelten gelöschet werden und nur ein Eintrag pro Person bleibt.

          Comment


          • #6
            einen Schritt weiter:

            select "name_", "vorname", "geburtsdatum", "geschlecht",
            count (*)
            as anzahl
            from [IRMDB].[dbo].[ExpTbl91]
            group by "name_", "vorname", "geburtsdatum", "geschlecht"
            having count(*) >1


            mit dieser Abfrage sehe ich welche Einträge doppelt oder mehrfach vorhanden sind.

            Mein Ziel: Ich sollte diese doppelte oder mehrfach Einträge sehen können und bis auf einen löschen. Dasss heisst, dass nachher nur einen Eintrag bleiben sollte.

            Comment


            • #7
              Das geht nur, wenn jeder Datensatz einen eindeutigen Schlüssel hat. Nehmen wir mal an, dass sei die Referenznummer (und die Tabelle heiße "Personen" wegen der besseren Verständlichkeit). Dann behältst du so bei den mehrfachen immer den mit der kleinsten Nummer und die anderen werden gelöscht:

              delete from Personen where exists
              (select 1 from Personen p2
              where p2.Name = Personen.Name
              and p2.Vorname = Personen.Vorname
              and p2.Geburtsdatum = Personen.
              and p2.Geschlecht t2.y = Personen.Geschlecht
              and p2.Referenznummer < Personen.Referenznummer)

              Aber Achtung - ein kleiner Fehler und es könnte viel mehr oder etwas anderes gelöscht werden als du möchtest!

              Am besten du testest das vorher mit
              select * from Personen ... anstatt
              delete from Personen ...
              dann siehst du mal, was alles gelöscht wird und auch, wie lange das etwa dauern wird (kann bei vielen Datensätzen schon einige Zeit brauchen).

              bye,
              Helmut

              PS: eine Datensicherung zuviel kann man nie haben

              Comment

              Working...
              X