Hallo Forum,
ich bin zum ersten mal hier und möchte Euch erstmal begrüßen.
Ich habe eine Löschabfrage erstellt, die nicht funktioniert und ich weiß nicht warum.
Es geht darum, dass ich mehrere identische Datensätze habe mit der selben Nr (Patistammnr)
Ich möchte Sie auf einen Datensatz eindampfen. Dafür erstellte ich eine Duplikateabfrage und danach habe ich eine löschabrage daraus gemacht und eine Unterabrage mit folgendem Eintrag bei Patistammnr.
In (select Min([Su_Resultate1].[PATISTAMMNR]) as MinvonPatistammnr from [Su_Resultate1] group by [Su_Resultate1].[NAME], [Su_Resultate1].[VORNAME], [Su_Resultate1].[GEBDAT], [Su_Resultate1].[EINSKURZ], [Su_Resultate1].[LABEINDAT], [Su_Resultate1].[ERGEBNIST1], [Su_Resultate1].[ERGEBNIST2] having (((count([Su_Resultate1].[NAME]))>1) and ((count([Su_Resultate1].[VORNAME]))>1) and ((count([Su_Resultate1].[EINSKURZ]))>1) and ((count([Su_Resultate1].[LABEINDAT]))>1) and ((count([Su_Resultate1].[ERGEBNIST1]))>1) and ((count([Su_Resultate1]))>1) and ((count([Su_Resultate1].[ERGEBNIST2]))>1)))
Wenn ich die Abrage ausführe dauert es erstmal ziemlich lang (>80 000 Datensätze) und danach möchte er alle Löschen.
Es wäre schön wenn ihr mir sagen könntet, was ich falsch mache
Gruß
Mina
In der Unterabfrage findet eine erhebliche Gruppierung + Aggregierung statt. Das ist Aufwand.
Unterabfragen im WHERE-Teil können/werden mehrfach bis vielfach ausgeführt. Das vervielfacht Aufwand.
Viel Aufwand bei dann auch höherer Datenmenge und ohne Indexnutzung (http://www.ms-office-forum.net/forum/showthread.php?t=317707) wird dann auch spürbar bis belastend, auch bei Hardware neuerer Generation.
ZitatEs geht darum, dass ich mehrere identische Datensätze habe mit der selben Nr (Patistammnr)
Warum beschäftigst Du Dich beim Gruppieren mit dann unnötigen Feldern.
Beispielhafte vollständige(!!) Löschabfrage:
DELETE
FROM
TabX AS A
WHERE
EXISTS
(
SELECT
NULL
FROM
TabX AS B
WHERE
B.Patistammnr = A.Patistammnr
AND
B.ID < A.ID
)Hier wird alles gelöscht, wo es eine gleiche Patistammnr und eine höhere ID als die niedrigste ID zur Patistammnr gibt.
Weniger Aufwand geht wohl kaum, und spätestens mit einem Index auf beide Felder läuft die Abfrage sehr zügig.
Hallo,
herzlichen Dank für Eure Mühe. Ich muss rumprobieren was schlußendlich für mich die richtige Lösung ist.
Du hast mir auf jeden Fall mal weiter geholfen.
Gruß
Mina