webForumDet fria alternativet

DISTINCT

9 svar · 288 visningar · startad av OveRRidE

OveRRidEMedlem sedan feb. 200112 078 inlägg
#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.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

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.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

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"
LarsGMedlem sedan dec. 200012 464 inlägg
#4

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.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Alltså; som separata conn.execute:s, t.ex.?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#6

Hrm. Det blir fel. Det är bara 'epost'-kolumnen som skall vara distinct, de andra får innehålla vad som helst.

LarsGMedlem sedan dec. 200012 464 inlägg
#7
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.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#8

Vad gör min()?

LarsGMedlem sedan dec. 200012 464 inlägg
#9

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?!

OveRRidEMedlem sedan feb. 200112 078 inlägg
#10

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.

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)