15. juli 2003 - 12:42Der er
15 kommentarer og 3 løsninger
Hjælp til SQL-forespørgsel
Hej, jeg har en sql som jeg ikke har løst 100%.
her er den: SELECT Amt.Navn, COUNT(Amt) as num FROM Amt Left outer JOIN Kommune on Amt.Navn=Kommune.Amt, Firma, Byer WHERE Firma.byid=Byer.id AND Byer.kom=Kommune.id AND Firma.brugernavn IS NOT NULL GROUP BY Amt.Navn
Problemet er at den ikke giver en række for hver amt men kun for de amter som har firmaer. Hvordan får jeg amter uden firmaer med ?
Fjerner jeg IS NOT NULL får jeg en forkert COUNT(Amt)-værdi...
SELECT Amt.Navn, COUNT(Amt) as num FROM Amt Left outer JOIN Kommune on Amt.Navn=Kommune.Amt WHERE Firma.byid=Byer.id AND Byer.kom=Kommune.id AND Firma.brugernavn IS NOT NULL GROUP BY Amt.Navn
hvis du skal have de amter med, hvor der ikke er firmaer, så skal du i hvert fald ikke sortere de firmarer fra, som er NULL ---hvilket sker med IS NOT NULL
Prøv SELECT Amt.Navn, DISTINCT COUNT(Amt) AS num FROM Amt LEFT OUTER JOIN Kommune ON Amt.Navn = Kommune.Navn, Firma, Byer WHERE Firma.byid=Byer.id AND Byer.kom=Kommune.id GROUP BY Amt.Navn
SELECT Amt.Navn, Kommune.*, Byer.*, Firma.* DISTINCT Count(Amt) as Num FROM Amt, Kommune, Byer, Firma WHERE Amt.Navn = Kommune.Navn AND Byer.kom = Kommune.id AND Firma.byid = Byer.id GROUP BY Amt.Navn
jeg vil ganske "simpelt" vide hvor mange firmaer der er i det enkelte amt. det får jeg også at vide med den sql som jeg har pastet. problemet er bare at de amter med nul firmaer ikke er med i resultsættet.
SELECT Count(Firma.Navn) as antalFirmaer, Amt.Navn FROM Firma, Kommune, Amt, Byer WHERE Amt.Navn = Kommune.Navn AND Byer.kom = Kommune.id AND Firma.byid = Byer.id GROUP BY Amt.Navn
nederste giver det samme som den jeg har pastet med en lille modifikation af Amt.Navn = Kommune.Navn til Amt.Navn = Kommune.Amt. Må ikke paste tabellerne...
(SELECT Amt.Navn, COUNT(Amt.Navn) AS num FROM Amt, Kommune, Byer, Firma WHERE Amt.Navn=Kommune.Amt AND Byer.kom=Kommune.id AND Firma.byid=Byer.id GROUP BY Amt.Navn) UNION (SELECT DISTINCT Amt.Navn, 0 AS num FROM Amt, Kommune, Byer LEFT OUTER JOIN Firma ON Firma.byid=Byer.id AS Temp WHERE Amt.Navn=Kommune.Amt AND Temp.kom=Kommune.id AND Temp.byid IS NULL)
Det burde gøre det :o) (fungerer kun fra MySQL v. 4.0.0)
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.