Tellen in combinatie met Left Join en subselect

Status
Niet open voor verdere reacties.

Pickleman

Gebruiker
Lid geworden
6 jul 2006
Berichten
31
Situatie:

Ik heb drie tabellen, A, B en C.

A.GroepNr is gekoppeld met B.GroepNr
B.Nr met C.Nr
C heeft verder o.a. een boolean Getest In de tabel kan het voorkomen dat Getest niet is ingevuld

Nu wil ik van alle records van A zien hoeveel records er zijn van B waarvan C.Getest=True
Daar waar er records vanuit A zijn waar geen link ik met B, moet het result een 0 geven.
Ook indien er wel een koppeling met B is, maar geen koppeling met C waar getest = False of niet ingevuld, dan ook een 0 terug

Afgezien de test op C.Getest=true lukt het me om mbv LEFT JOIN een query te maken:

Code:
SELECT COUNT(b.GroepNr) as AantalRecords
FROM  A
LEFT JOIN B
ON A.GroepNr=B.GRoepNr
GROUP BY A.GroepNr

Hoe 'schuif' ik die C.Getest er in?

Na deze query, maar die zal dan eenvoudiger zijn, moet een gelijksoortige komen, maar dan met C.Getest = False of niet ingevuld

Weet iemand raad?

bvd,

Peter
 
En hoe koppel je die derde tabel dan?
Al een en ander geprobeerd, maar of syntaxen, of ongewenst resultaat
 
Dat lukt me nog niet. Het is voor mij de eerste keer dat ik zowel met LEFT JOIN werk en ik weet niet hoe verder te gaan. Is er een subquery bij nodig? Hoe pas ik 'm in?

Code:
SELECT COUNT(b.GroepNr) as AantalRecords
FROM  A
LEFT JOIN B
ON A.GroepNr=B.GRoepNr
WHERE B.nr = C.nr
AND C.Getest = True
GROUP BY A.GroepNr

levert bij mij syntaxen op. Tabel C kan niet gevonden en ik krijg 'm niet geplaatst bij zowel de FROM als de LEFT JOIN
 
SELECT COUNT(b.GroepNr) as AantalRecords
FROM A
LEFT JOIN B ON A.GroepNr=B.GRoepNr
WHERE B.nr IN
(SELECT C.nr FROM C WHERE C.Getest = True)
GROUP BY A.GroepNr
 
Laatst bewerkt:
Thanks Bartuls, ik ben iets verder, maar ik krijg nu alleen records terug met aantallen > 0ik wil proberen in 1 keer alle records van tabel A zien, met daarin de count van de voorwaarden die in B en C gelden.

Nu doet er het volgende (gekke) zich voor
Ik heb er dit van gemaakt:

Code:
SELECT COUNT(b.GroepNr) as AantalRecords
FROM A
LEFT JOIN B ON A.GroepNr=B.GRoepNr
AND B.nr IN 
(SELECT DISTINCT C.nr FROM C WHERE C.Getest = True)
GROUP BY A.GroepNr

Nu levert de subselect in mijn geval op: (4, 5, 28)

Als ik bovenstaand record uitvoer, krijg ik alle records eruit met een count van 0
indien ik de subeselect vervang door het result ervan er fixed in te zetten zoals:

Code:
SELECT COUNT(b.GroepNr) as AantalRecords
FROM A
LEFT JOIN B ON A.GroepNr=B.GRoepNr
AND B.nr IN 
(4,5,28)
GROUP BY A.GroepNr

Dan gaat het WEL goed.

Waar zijn mijn denkfout?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan