21. december 2007 - 08:08Der er
7 kommentarer og 1 løsning
Dubletter slettes, men én skal forblive i tabellen
Hej med Jer
Jeg har søgt en del svar igennem omkring sletning af dubletter, men kan ikke finde det svar jeg søger, så jeg prøver selv med et spørgsmål:-)
Jeg har en tabel der 'logger' nogle data. Men denne log kan komme til at indeholde dubletter, altså hele rækker der er ens, bortset fra id´et.
Jeg ønsker at lave en funktion der automatisk sletter alle dubletter i tabellen, med undtagelse af en enkelt, hver gang jeg forlader en bestemt formular.
Hvis det kun er ID, der adskiller dine data, så kan du jo f.eks. slette alle undtagen min(ID) eller max(ID). Ellers vil man typisk slette alt undtagen rowid = 1 (Oracle)
Jeg har delt det op i 3 dele, så det er mere overskueligt hvad der sker:
Tabel id, felt1, felt2
find alle dubletter: SELECT Count(t.felt1) AS AntalOffelt1, t.felt1, t.felt2 FROM t GROUP BY t.felt1, t.felt2 HAVING (((Count(t.felt1))>1));
find min(ID) for dubletterne: SELECT Min(t.Id) AS MinOfId, t.felt1, t.felt2 FROM t GROUP BY t.felt1, t.felt2 ORDER BY Min(t.Id);
find alle ID, som er større end min(ID) for dubletterne SELECT t.Id, t.felt1, t.felt2 FROM t where t.Id not in (SELECT Min(t.Id) AS MinOfId FROM t GROUP BY t.felt1, t.felt2)
Så kan du selv skrive det sammen i en select, og så lave den om til
delete from tabel where ID in (select .... og alt det ovenfor)
Synes godt om
Slettet bruger
21. december 2007 - 12:32#7
Lav et indeks i din tabel!~)
Åben tabel i designvisning Gå i vis/indeks Skriv et indeks navn og det første felt, som skal indgå. Gør indeks'et unikt ved at vælge ja i egenskaben uniktindeks Herefter skriver du de resterende felter uden at skrive et indeks navn, det betyder at de alle falder ind under det samme indeks...
Er ked af at have brugt jeres tid, jeg kan simpelthen ikke finde hoved og hale i ovenstående forklaringer...
Jeg giver op...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.