webForumDet fria alternativet
Logga in / Bli medlem

Unik hämtning

Databaser & SQL

11 svar · 329 visningar · startad av LAMP

Medlem sedan mars 2002777 inlägg
Frågan#1

Bör man inte kunna utesluta dubletter med denna sql:en

SQL ="select distinct Email from mail order by Email"

fälttypen är varchar och jag får ut dubletter trots användandet av distinct.

Medlem sedan dec. 200012 464 inlägg
#2

Jodå, det skall fungera så. Ser din sql-sats ut exakt så som du har skrivit?

Medlem sedan mars 2002777 inlägg
#3

Jo, den är kopierad med Ctrl + c och inklistrad med Ctrl + v.

Mycket märkligt :(

Medlem sedan juni 200032 967 inlägg
#4

Om det inte råkar vara så att vissa e-postadresser har exempelvis mellanslag före eller efter sig i fältet, då kan det ju se ut som att samma adress kommer fler gånger.

mvh,

Medlem sedan dec. 200012 464 inlägg
#5

Avslutande blanka är inte signifikanta vid distinct.

Däremot så är inledande blanka signifikanta, men dessa borde vara lättare att se.

Medlem sedan mars 2002777 inlägg
#6

smart! men då borde jag få ut rätt med denna?

SQL ="select distinct trim(Email) from mail order by Email"
Medlem sedan juni 200032 967 inlägg
#7

Vad använder du för dbms? Med Access borde det där fungera, men i T-SQL (SQL Server) finns inte Trim, utan du får använda LTRIM() för att slänga bort inledande blanka.

Möjligen får du med Access ha Order by 1 istället, och i SQL-Server ge ett alias på fältet, som du sedan sorterar på.

Mvh,

Medlem sedan mars 2002777 inlägg
#8

Tack, LTrim() löste problemet. Är inte första fältet i sql:en nr 0 ?

Medlem sedan mars 20007 896 inlägg
#9

Jäpp, det är det.

Medlem sedan juni 200032 967 inlägg
#10

Nej, det är det inte, det är 1. Av någon anledning.
Det är dock ganska Access-specifikt.

Däremot, när du använder recordset på exempelvis en ASP-sida så är är första indexet 0.

Mvh,

Medlem sedan dec. 200012 464 inlägg
#11

Det är inte Access-specifikt att man kan använda

order by 1

Det stöds av de flesta dbms, även om det är borttaget ur SQL 99. Det som dock inte finns i Access är att man kan använda aliasnamn i order by.

select distinct email trim(email) as e from t order by e

Det finns i de flesta dbms och det är så det är tänkt enligt SQL 99

Medlem sedan juni 200032 967 inlägg
#12

En tacker för förklaringen! :D

Mvh,

426 ms totalt · 4 externa anrop · v20260731065814-full.0583408b
285 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
285 ms — ändringar (db)