Om het complete probleem zo simpel mogelijk te houden, hierbij een voorbeeld:

tabel_gekochteproducten (KLANT_ID, PROD_ID)
1, 1
1, 2
2, 1

tabel_klant (ID, NAAM)
1, Piet
2, Gijs
3, Henk

Mijn bedoeling is om met 1 query een lijst te maken van alle klanten, waarbij per klant staat hoeveel producten hij gekocht heeft.

Dus output:
Piet, 2
Gijs, 1
Henk, 0

Het zou volgens mij erg makkelijk moeten zijn, maar om de een of andere reden kan ik geen goede oplossing vinden.

Want uiteraard kan het met (snippet van andere site)
SELECT p.*, qty
FROM p, (SELECT pno, qty FROM sp WHERE sno = 'S3')
WHERE p.pno = sp.pno
Maar dan oriƫnteer je vanuit het 2de tabel, en dat is niet de bedoeling.

Eigenlijk wil ik het liefst iets dat direct na de SELECT komt (dus niet bij FROM of WHERE), dus bijv.
SELECT (COUNT(xxxx)) AS aantalproducten, naam FROM tabel_klant
Maar ik zou niet weten hoe dat te realiseren is.

SELECT
	k.id,
	k.naam
	COUNT(p.*) as aantal_producten
FROM
	tabel_klant as k
LEFT JOIN
	tabel_gekochteproducten as p
	ON p.klant_id = k.id
GROUP BY
	k.id,
	k.naam

Ik weet alleen niet zeker wat er in die COUNT functie moet staan. Ik denk dat '1' (zonder de quotes) al voldoende is als je het aantal aankopen per klant wilt weten. De LEFT JOIN zorgt ervoor dat ook klanten die niets hebben gekocht in het lijstje komen. Anders moet je een RIGHT INNER JOIN doen volgens mij.

Zie ook deze tutorial over JOINS.

Reageren