Avatar billede nej Nybegynder
10. januar 2000 - 00:23 Der er 15 kommentarer og
2 løsninger

Forståelse af DISTINCT

Hej

Nu har jeg siddet og rodet med det her DISTINCT i noget tid. Nogle gange kan jeg være heldig jeg rammer det i første hug, andre gange skal der fifles en del, men nu er jeg sgu kørt sur i det. Jeg ville gerne hvis der var en der kunne forklare mig, hvordan DISTINCT virker, og hvilke hensyn man skal tage når man konstruere ens sql-sætning, for jeg tror jeg har lagt mærke til at der skal være en speciel sammensætning før det ligesom funker, og man får smidt en masse dublette ud..

Well, håber der er en der kan få tågen til at lette :-)

Mvh Emil
Avatar billede baunsgaard Nybegynder
10. januar 2000 - 00:44 #1
Hvilke problemer er det du oplever?
Avatar billede stigo Nybegynder
10. januar 2000 - 02:08 #2
DISTINCT i en SQL sætning betyder at den kun skal vise unike poster - dvs. hvis du har 2 poster der har værdien "Peter" i feltet "fornavn", så vil der UDEN distinct komme 2 felter, men MED distinct OG hvis tabel.fornavn bliver brugt som en (eller flere!)betingelse(r), så vil der kun komme et felt - også selv om at begge poster opfylder betingelserne
Avatar billede nej Nybegynder
10. januar 2000 - 07:18 #3
Baunsgaard og stigo: Det virker bare ikke :-)

well, det som stigo ved jeg godt, men der må værre lidt mere til det, for jeg synes da at jeg gør det?

Mvh Emil
Avatar billede sone Nybegynder
10. januar 2000 - 08:21 #4
Prøv at sende et eksempel på en SQL-sætning som ikke virker.
Avatar billede nej Nybegynder
10. januar 2000 - 08:31 #5
SELECT DISTINCT [tblNummer1.Id], [tblNummer1.navn], [tblNummer1.id2] FROM tblNummer1 WHERE id2 = 2 OR id2 = 4 OR id2= 6 OR id2 = 8 OR id2 = 9 ORDER BY tblNummer1.Id;

Jeg skal så have alle de forskellige tblNummer1.Id der opføler betingelserne, men jeg får dubletter ?

Mvh Emil
Avatar billede nej Nybegynder
10. januar 2000 - 08:35 #6
opfylder even
Avatar billede sone Nybegynder
10. januar 2000 - 08:44 #7
Umiddelbart så lyder det mærkeligt...
Hvis du har "DISTINCT id", så SKAL alle returnerede værdier for feltet id være forskellige.

Min påstand... Du må gøre et eller andet forkert ;-)
Avatar billede nej Nybegynder
10. januar 2000 - 08:49 #8
Sone:
Ja, det var jo også det jeg tænkte :-)

Well, jeg må jo fuske lidt med det!
Avatar billede sone Nybegynder
10. januar 2000 - 08:51 #9
Arbejder du på Access, så send mig en kopi af databasen.
Avatar billede nej Nybegynder
10. januar 2000 - 08:53 #10
Har du Office 2000, eller skal jeg konvertere den først?
Avatar billede nej Nybegynder
10. januar 2000 - 09:05 #11
nu har jeg barberet den lidt ned, men den er stadig gal?

SELECT DISTINCT Id, id2 FROM tblNummer1 WHERE id2 = 2 OR id2 = 4 ORDER BY id;

det giver mig:
| id | id2 |
------------
| 4  |  2  |
------------
| 4  | 4  |

det skulle jo efter vores teori kun give mig et 4 tal under id ?

Avatar billede baunsgaard Nybegynder
10. januar 2000 - 09:12 #12
DISTINCT returnerer unikke records baseret på hvilke felter du har specificeret i din select. Dvs. både id, navn og id2 skal være ens før der bliver sorteret noget ud...

Mvh
Avatar billede nej Nybegynder
10. januar 2000 - 09:18 #13
Jamen....
så kan jeg jo ikke søge på id2 ???????

Jeg kan godt se hvad du mener, men så kan man jo ikke bruge det til så meget?

Mvh Emil
Avatar billede baunsgaard Nybegynder
10. januar 2000 - 09:20 #14
Du kan skrive

SELECT Min(Id), Min(Id2)
FROM tblNummer
WHERE Id2 IN [2, 4]
GROUP BY Id
ORDER BY Id2

Så får du den mindste af Id2 værdierne tilknyttet til hver Id.

Mvh
Avatar billede nej Nybegynder
10. januar 2000 - 09:24 #15
Baunsgaard:
Nu er min sql-sætning dynmisk og er her baberet ned for at det er lettere at overskue det. 2 og 4 er altså et par værdier der kan være alt lige fra 1-1000000000 :-)
Avatar billede baunsgaard Nybegynder
10. januar 2000 - 09:37 #16
Ok, du kan nemt udvide den ;-)

SELECT Min(Id), Min(Id2)
FROM tblNummer
WHERE Id2 IN [2, 4, 10000000, 1000, 2000, 30004, 40303, 21]
GROUP BY Id
ORDER BY Id2

Mvh
Avatar billede nej Nybegynder
11. januar 2000 - 07:40 #17
Tak for inspirationen, jeg leger videre med det :-)

Mvh Emil
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester