Avatar billede jmp.dk Nybegynder
21. juli 2008 - 11:58 Der er 4 kommentarer og
1 løsning

Sub select optimering

Jeg har brug for en liste af alle klienter der har en note og i saa fald hvor mange.
Her er hvad jeg har:

SELECT NAME, (SELECT COUNT(ID) FROM NOTES n WHERE n.CLIENT_ID = c.ID ) AS NO_NOTES FROM CLIENTS c 
WHERE (SELECT COUNT(ID) FROM NOTES n WHERE n.CLIENT_ID = c.ID ) > 0

Forstaar ikke helt hvorfor jeg ikke kan skrive
WHERE NO_NOTES > 0
Med den saetning jeg har skal databasen lave samme count to gange.
Avatar billede aaberg Nybegynder
21. juli 2008 - 12:07 #1
with tmp as
(
  SELECT NAME, (SELECT COUNT(ID) FROM NOTES n WHERE n.CLIENT_ID = c.ID ) AS NO_NOTES
  FROM CLIENTS
)
select NAME, NO_NOTES
from tmp
where NO_NOTES > 0
Avatar billede aaberg Nybegynder
21. juli 2008 - 12:18 #2
Skal lige tilføjes, at ovenstående query kun virker i Sql Server 2005/2008. Ikke i 2000 versionen.
Avatar billede jmp.dk Nybegynder
21. juli 2008 - 12:18 #3
Yes, thanks.
points er dine.
Avatar billede aaberg Nybegynder
21. juli 2008 - 12:32 #4
tak :-)
Avatar billede kjulius Novice
21. juli 2008 - 19:37 #5
Jeg forstår ikke helt din løsning med en subselect. Var det ikke meget nemmere (og hurtigere) at lave det som en gemen inner join med grouping (da du kun ønsker dem med noter medtaget, ellers havde det været en left outer join):

SELECT c.NAME, COUNT(*) AS NO_NOTES
FROM CLIENTS c
INNER JOIN NOTES n ON n.CLIENT_ID = c.ID
GROUP BY c.NAME
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