21. juli 2008 - 11:58Der 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.
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
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
Synes godt om
Ny brugerNybegynder
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.