Avatar billede funkyloonie Nybegynder
15. juli 2003 - 12:42 Der 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...
Avatar billede codebase Praktikant
15. juli 2003 - 12:45 #1
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
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:00 #2
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
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 13:27 #3
begge løsninger fejler... ved godt at IS NOT NULL er et af problemerne
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:34 #4
prøv (et skud i tågen)

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
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:35 #5
hov - ret lige
  DISTINCT Count(Amt)
til
  DISTINCT Cound(Amt.Navn)
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 13:39 #6
fejler også og kan ikke lige se hvad det er.
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:43 #7
kan du ikke lige poste tabel-strukturen for de fire tabeller (Amt, kommune, firma og byer)
Avatar billede jinxit Nybegynder
15. juli 2003 - 13:45 #8
Hvis du kun skal bruge navne på alle amter samt antallet af amter kan jeg ikke se hvad du skal bruge de andre 3 tabeller til??

Forklar hvad ideen med dit query er så skal jeg nok omskrive det...
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 13:49 #9
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.
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:52 #10
Således ?

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
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 13:54 #11
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...
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 14:00 #12
har løst den på den nemme måde vha 2 sql'er. lader spg stå åbent lidt endnu hvis der er nogle som er stædige og vil løse den. tak for hjælpen ! :)
Avatar billede jinxit Nybegynder
15. juli 2003 - 14:02 #13
(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)
Avatar billede kimlar Nybegynder
15. juli 2003 - 14:07 #14
Fejlen må ligge i :

Firma.byid = Byer.id

Når du ikke kan finde en række i Firma kan du ikke bruge Firma.byid til at matche Byer.id
Avatar billede funkyloonie Nybegynder
15. juli 2003 - 14:31 #15
jeg kører med ver.4 men får en fejl omkring brugen af Temp. jeg kan godt se hvad du vil men har ikke gennemskuet løsningen endnu.
Avatar billede tbm_iceman Nybegynder
15. juli 2003 - 15:19 #16
Prøv denne.... Bare et skud

SELECT A.Navn, (SELECT F.Count(id) FROM Firma F, Kommuner K, Byer B WHERE F.ByID=B.ID AND B.Kom=K.ID AND K.Amt=A.Navn) AS AntalFirma FROM Amt A,;
Avatar billede tbm_iceman Nybegynder
15. juli 2003 - 15:26 #17
Ups det var et svar... :)
Avatar billede funkyloonie Nybegynder
25. november 2003 - 16:24 #18
længe siden. deler lige ml jer.
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