O OveRRidE Medlem sedan feb. 2001 12 078 inlägg Frågan 28 aug. 2002 12:56 #1 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.
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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.
O OveRRidE Medlem sedan feb. 2001 12 078 inlägg 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"
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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.
O OveRRidE Medlem sedan feb. 2001 12 078 inlägg Alltså; som separata conn.execute:s, t.ex.?
O OveRRidE Medlem sedan feb. 2001 12 078 inlägg Hrm. Det blir fel. Det är bara 'epost'-kolumnen som skall vara distinct, de andra får innehålla vad som helst.
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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.
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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?!
O OveRRidE Medlem sedan feb. 2001 12 078 inlägg 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.