SELECT in SELECT
Martijn Verhoef
03/10/2010 13:21:02Om 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.
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.
PHP hulp
24/12/2024 14:46:49Jelmer -
03/10/2010 13:34:19Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
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
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
Zie ook deze tutorial over JOINS.
Gewijzigd op 03/10/2010 13:36:42 door Jelmer -