Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Doppelte Einträge löschen

Begonnen von Mina, Januar 04, 2018, 10:08:34

⏪ vorheriges - nächstes ⏩

Mina

Hallo Forum,

wer kann mir weiterhelfen?
Ich möchte in einer Tabelle alle doppelten Einträge löschen und zwar die in den Feldern
PATISTAMMNR EINKURZ LABEINDAT ERGEBNIST2 und ERGEBNIST1 dieselben Einträge aufweisen.

Ich habe es mit einer SQL Anweisung versucht
DELETE FROM Su_Resultate1
         WHERE 
                         PATISTAMMNR = PATISTAMMNR AND
                         EINSKURZ = EINSKURZ AND
                         LABEINDAT = LABEINDAT AND
                         ERGEBNIST2 = ERGEBNIST2 AND
                         ERGEBNIST1 = ERGEBNIST1

Diese Anweisung funktioniert nicht er löscht fast alle Datensätze.

Ich möchte jedoch, dass ein Datensatz stehen bleibt je PATISTAMMNR

Was mache ich falsch???


Danke

Mina

Lachtaube

Wenn die Tabelle zumindest noch ein weiteres Feld bzw. Feldkombination zur Unterscheidung aufweist (idealerweise ein Primärschlüssel; manchmal reicht auch ein Timestamp), könnte man per Definition den höchsten oder niedrigsten Wert aus diesem Feld bzw. dieser Feldkombination bestehen lassen.

Das Prinzip wird in Roger's Access Library unter RemoveDuplicates.mdb erklärt.
Grüße von der (⌒▽⌒)

Mina

Hallo,

Danke für die schnelle Antwort
Es ist eine ID vorhanden (Auto Wert)

Gruß
Mina

DF6GL

Hallo Mina,


benutze den "Abfrage-Assistenten zur Duplikatssuche" und lösche darin die Doppelten DS händisch ..

oder

Delete from Su_Resultate1 where id in
        (select t2.id from Su_Resultate1  t1 inner join  Su_Resultate1 t2 on t1.id>t2.id
          where t1 PATISTAMMNR = t2.PATISTAMMNR 
          and t1.EINSKURZ = t2.EINSKURZ
          and t1.LABEINDAT = t2.LABEINDAT
          and t1.ERGEBNIST2 = t2.ERGEBNIST2
          and t1.ERGEBNIST1 = t2.ERGEBNIST1)

Mina

#4
Hallo,
ich die SQL Anweisung in eine Abfrage eingefügt.
und bekomme bei der Ausführung folgende
Fehlermeldung
Syntaxfehler in Abfrageausdruck id in
select t2.id from Su_Resultate1  t1 inner join  Su_Resultate1 t2 on t1.id>t2.id
          where t1 PATISTAMMNR = t2.PATISTAMMNR
          and t1.EINSKURZ = t2.EINSKURZ
          and t1.LABEINDAT = t2.LABEINDAT
          and t1.ERGEBNIST2 = t2.ERGEBNIST2
          and t1.ERGEBNIST1 = t2.ERGEBNIST1)

Die manuelle Lösung habe ich verworfen, da es sich um ca. 36.000 Datensätze handelt. Puh!!

Gruß
Mina


ebs17

oder so:
DELETE
FROM
   Su_Resultate1 AS t1
WHERE
   EXISTS
      (
         SELECT
            NULL
         FROM
            Su_Resultate1 AS t2
         WHERE
            t1.id > t2.id
               AND
            t1.PATISTAMMNR = t2.PATISTAMMNR
               AND
            t1.EINSKURZ = t2.EINSKURZ
               AND
            t1.LABEINDAT = t2.LABEINDAT
               AND
            t1.ERGEBNIST2 = t2.ERGEBNIST2
               AND
            t1.ERGEBNIST1 = t2.ERGEBNIST1
      )
Mit freundlichem Glück Auf!

Eberhard

Mina

Hallo,

habe den fehler gefunden.
Es fehlte dieser Punkt in der Anweisung
Delete from Su_Resultate1 where id in
        (select t2.id from Su_Resultate1  t1 inner join  Su_Resultate1 t2 on t1.id>t2.id
          where t1.PATISTAMMNR = t2.PATISTAMMNR
          and t1.EINSKURZ = t2.EINSKURZ
          and t1.LABEINDAT = t2.LABEINDAT
          and t1.ERGEBNIST2 = t2.ERGEBNIST2
          and t1.ERGEBNIST1 = t2.ERGEBNIST1)

jETZT FUNKTIONIERT ES:

VIELEN DANK

Gruß
Mina