Salve a tutti. Nel mio db ho una struttura come questa:
tblUsers
User_id, User_username
tblBandMembers
BandMember_userIdIns, BandMember_type
I campi User_id e BandMember_userIdIns sono collegati tramite chiave esterna.
Ho la necessità di fare una query che controlla quanti BandMembers sono stati aggiunti da ogni singolo User.
La query è la seguente e funziona:
SELECT COUNT(BandMember_id), User_username
FROM tblUsers LEFT JOIN tblBandMembers
ON User_id = BandMember_userIdIns
GROUP BY User_username ORDER BY User_username;
In questo caso se alcuni User non hanno aggiunto alcuna riga, accanto al loro nome viene visualizzato 0.
Il problema si complica se voglio usare anche il campo BandMember_type, che è una flag che mi specifica il tipo. I valori presenti sono 1,2 e 3 e io vorrei fare tre query per controllare separatamente le varie statistiche.
La query diventa:
SELECT COUNT(BandMember_id), User_username
FROM tblUsers LEFT JOIN tblBandMembers
ON User_id = BandMember_userIdIns
WHERE BandMember_type= 1
GROUP BY User_username
ORDER BY User_username;
Il problema che ora mi mostra soltanto gli Users che hanno inserito almeno una riga. Se qualcuno non ha inserito nulla, invece di mostrare 0, non fa vedere proprio la riga.
Domande:
1. Perché fa così? Se io ho una left join non dovrebbe COMUNQUE mostrarmi ogni riga della prima tabella? Di sicuro il comportamento deriva da group by, dato che rimuovendolo vedo tutto, ma non capisco leggendo la documentazione!
2. Come faccio a fare in modo che questa query faccia ciò che dico io?
Grazie a chi mi aiuterà