Ciao a tutti.
Cerco di spiegarvi il mio problema semplificando.
Ho tre tabelle, buoni_maturati, buoni_consegnati e utenti, dove memorizzo via via dei buoni sconto che uno matura e quelli che gli vengono consegnati allo scopo di fare via via un conguaglio.
La tabella utenti è in relazione uno a molti sia con buoni_maturati che con buoni_consegnati, che sono due tabelle strutturalmente identiche. Per ragioni che non sto qui a spiegare, le due tabelle devono essere separate.
codice:
Struttura di Struttura di
buoni_maturati e buoni_consegnati utenti
---------------------------------- ---------
id PK id PK
id_utente chiave esterna nome
data cognome
quantita
Ho bisogno di una query che mi visualizzi per ciascun utente la somma dei buoni maturati e di quelli consegnati e la loro differenza.
Se faccio due query liscie separate, i calcoli funzionano.
codice:
SELECT U.cognome, U.nome, SUM(M.quantita) AS n_buoni_maturati
FROM utenti AS U INNER JOIN buoni_maturati AS M ON U.id=M.id_utente
GROUP BY M.id_utente ORDER BY U.cognome ASC;
risultato aggiungendo clausola WHERE U.id=1 : n_buoni_maturati = 47, ok
codice:
SELECT U.cognome, U.nome, SUM(C.quantita) AS n_buoni_consegnati
FROM utenti AS U INNER JOIN buoni_consegnati AS C ON U.id=C.id_utente
GROUP BY C.id_utente ORDER BY U.cognome ASC;
risultato aggiungendo clausola WHERE U.id=1 : n_buoni_consegnati = 15, ok
Se metto le due join in una query unica, fa calcoli strani e non capisco dove sbaglio. :master:
codice:
SELECT U.cognome, U.nome, SUM(M.quantita) AS n_buoni_maturati, SUM(C.quantita) AS n_buoni_consegnati
FROM (utenti AS U INNER JOIN buoni_maturati AS M ON U.id=M.id_utente)
INNER JOIN buoni_consegnati AS C ON U.id=C.id_utente
GROUP BY U.id
ORDER BY U.cognome ASC;
risultato aggiungendo clausola WHERE U.id=1 :
n_buoni_maturati = 94
n_buoni_consegnati = 510
???
Ho provato a cambiare il raggruppamento mettendo GROUP BY U.id, M.id_utente, C.id_utente, ma il risultato è identico.
In pratica moltiplica il risultato di n_buoni_maturati per 2, che è il numero di righe presenti nella tabella buoni_maturati con quell'id_utente; moltiplica il risultato dei n_buoni_consegnati per 34, che è il numero di righe presenti nella tabella buoni_consegnati con quell'id_utente;
Mi manca un passaggio fondamentale. 
Eppure non mi sembra una cosa tanto complicata...
Grazie a chi avrà la pazienza di aiutarmi...