Avatar billede Red0z Nybegynder
28. januar 2011 - 12:44 Der er 5 kommentarer og
1 løsning

SELECT WHERE NOT BETWEEN

Hey ! Sidder og prøver at trække nogle rækker ud.
Det foregår således.
Jeg har en tabel hvor der er 'TimeStamps' for hver gang brugeren har lavet noget. Nu vil jeg så gerne trække alle de brugere der IKKE har lavet noget ud på en liste.

Har forsøgt mig med f.eks :

SELECT User
FROM User_Reg
WHERE Time_Stamp NOT IN ( SELECT User_ID
                          FROM User_Log
                          WHERE Time_Stamp BETWEEN Date'2010-01-01' AND Date'2010-12-31' )

Og føler det sejler lidt da den sikkert tjekker hele User_Log hver gang den har ét User_ID for at finde det hele. Det tager en millard år.

Er der en mere effektiv løsning her ? Eller bare en løsning der virker. :)
Avatar billede teepee Nybegynder
28. januar 2011 - 13:33 #1
SELECT User
FROM User_Reg ur
WHERE Time_Stamp NOT IN ( SELECT User_ID
                          FROM User_Log ul
                          WHERE ur.user_id = ul.user_id AND Time_Stamp BETWEEN Date'2010-01-01' AND Date'2010-12-31' )
Avatar billede pgroen Nybegynder
28. januar 2011 - 13:45 #2
Noget i stil med nedenstående ?

SELECT ur.user
  FROM user_reg ur, user_log ul
WHERE ur.user_id = ul.user_id(+)
  AND ul.user_id IS NULL
  AND ul.time_stamp BETWEEN '2010-01-01' AND '2010-12-31';

- hvis jeg ellers har forstået problematikken korrekt...
Med forbehold for syntaksbøffer :-)
Avatar billede Red0z Nybegynder
28. januar 2011 - 13:53 #3
teepee's foreslag kører stadig . :)

Dog pgroens blev færdigt inden for 5 minutter, dog uden resultater, og jeg ved der er nogle der er inaktive mellem de givne datoer :)

Kan det være det her User_ID IS NULL der gør det ?

Bruger ID'et kommer jo aldrig til at være null.

Kan man evt. sige 'Vælg alle de bruger ID'er som ikke kom med Time_stamp men findes i User_Reg ? :)
Avatar billede teepee Nybegynder
28. januar 2011 - 15:36 #4
Har du lavet en foreign key på user_log.user_id med tilhørende index?
Avatar billede teepee Nybegynder
28. januar 2011 - 15:38 #5
Prøv iøvrigt at skrive "not exists" i stedet for "not in" det skulle gerne speede tingene op
Avatar billede Red0z Nybegynder
28. januar 2011 - 15:58 #6
Tak for hjælpen TeePee, det hjalp utroligt meget på effektiviteten at udskifte med NOT EXISTS, nu ser det ud til at køre :)

Fortsat god aften !
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
Computerworld tilbyder specialiserede kurser i database-management

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