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
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 (http://www.rogersaccesslibrary.com/forum/topic285.html) erklärt.
Hallo,
Danke für die schnelle Antwort
Es ist eine ID vorhanden (Auto Wert)
Gruß
Mina
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)
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
Hallo,
die öffnende Klammer vor "select" fehlt.
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
)
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
Hallo,
in der Tat.. 8)
ebs17 hat auch eine Alternative gegeben..