SELECT in SELECT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martijn Verhoef

Martijn Verhoef

03/10/2010 13:21:02
Quote Anchor link
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.
 
PHP hulp

PHP hulp

24/12/2024 14:46:49
 
Jelmer -

Jelmer -

03/10/2010 13:34:19
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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.
Gewijzigd op 03/10/2010 13:36:42 door Jelmer -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.