Om jag vill radera alla rader som inte är distinct i en tabell, hur gör jag då? Går det med en enda SQL-sats eller måste jag göra fler? Access 2002-fil.
DISTINCT
9 svar · 288 visningar · startad av OveRRidE
Du vill alltså ta bort duplikat och behålla en instans...
Har du en räknare i tabellen (a) eller har du flera helt identiska poster (b)?
a)
delete from t where id not in (select min(id) from t
group by c1,c2,c3,c4)
-- alla kolumner i tabellen utom räknare
b)
select distinct * into kopia from original
delete from original
insert into original select * from kopia
drop table kopia
metod b fungerar i alla lägen och kanske lite tryggare då det är enklare att verifiera att det stämmer.
Det finns en räknare i tabellen, ja. Kan jag använda b ändå?
Fråga; måste jag skapa 'kopia' eller skapas den som en temp-tabell automatiskt?
Det funkar förresten inte.
SQL = "select distinct * into kopia from [traffar] delete from [traffar] insert into [traffar] select * from kopia drop table kopia"
Du måste utföra det som separata statements. Det här inget man gör via ASP utan mer interaktivt i något verktyg.
Kopia skapas automatiskt om du använder select ... into.
Alltså; som separata conn.execute:s, t.ex.?
Hrm. Det blir fel. Det är bara 'epost'-kolumnen som skall vara distinct, de andra får innehålla vad som helst.
select email,min(c1),min(c2),min(c3),min(c4)
into kopia from traffar group by email
Om du vill ha de unika förekomsterna av alla email, och något värde från de andra kolumnerna.
Ja, separata execute-anrop.
Vad gör min()?
Min tar det minsta värdet från en grupp.
Det kanske är lika bra att börja från början om det inte löser sig.
Hur ser tabellen ut?
Ge ett exempelt på hur ditt data ser ut och vad som skall vara kvar efter delete.
Jag har gissat att det skulle kunna se ut som
id!email!c1!c2
-----------------
1!emal1!12!22
2!emal1!13!47
3!emal2!11!19
och att du vill ha kvar
id!email!c1!c2
-----------------
1!emal1!12!22
3!emal2!11!19
men att det inte spelar någon roll vilket värde som hamnar i c1 och c2?!
Nja. Jag måste fundera lite på detta, jag tror jag har stött på lite utav ett 'gränssnitts'-problem, hur nu det är möjligt i en .dll. :)
Jag återkommer.