Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [SQL ACCESS 2007] join tra 4 tabelle
Forum - Altri Linguaggi - [SQL ACCESS 2007] join tra 4 tabelle

Avatar
megadeth (Normal User)
Newbie


Messaggi: 19
Iscritto: 29/12/2010

Segnala al moderatore
Postato alle 19:53
Mercoledì, 29/12/2010
Salve ragazzi, ho un db su access che riguarda un autosalone con servizio di noleggio e auto-officina. Ho dei problemi per quanto riguarda il calcolo del prezzo complessivo (costo dei singoli ricambi + la manodopera per il tipo di intervento effettuato) di un dato intervento di riparazione...ecco la struttura del db:

http://img638.imageshack.us/i/immaginexpv.jpg/

Dato quindi in input l'id della riparazione di cui voglio sapere il prezzo, dovrei fare delle join tra le varie tabelle:

interventi-lavori per sapere il prezzo della manodopera
utilizzi-ricambi per sapere il prezzo dei vari ricambi utilizzati

Alla fine fare una somma tra questi due valori ed ottenere il prezzo complessivo.

Il problema è che devo fare tutto in una singola query e non sò come fare per le join!!!
Qualcuno sà darmi una mano??

Sono riuscito a fare questa query per la join tra le 4 tabelle
Codice sorgente - presumibilmente VB.NET

  1. SELECT *FROM (((riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip)
  2. INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro)
  3. INNER JOIN utilizzi AS u ON r.idRip=u.codRip)
  4. INNER JOIN ricambi AS c ON u.codRic=c.idRic
  5. WHERE R.idRip=[Inserisci il codice della riparazione];



L'unico problema (grave) è che se in una riparazione è stato utilizzato un solo ricambio, il risultato della join è un unico record mentre se sono stati utilizzati 2 o più ricambi ottengo il doppio dei record....come posso risolvere??

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 22:17
Mercoledì, 29/12/2010
secondo me viene fuori solo un casino tremendo.
Potresti fare uno scriptino in vba, sarebbe la cosa migliore probabilmente....

PM Quote
Avatar
megadeth (Normal User)
Newbie


Messaggi: 19
Iscritto: 29/12/2010

Segnala al moderatore
Postato alle 11:07
Giovedì, 30/12/2010
Testo quotato

Postato originariamente da lorenzo:

secondo me viene fuori solo un casino tremendo.
Potresti fare uno scriptino in vba, sarebbe la cosa migliore probabilmente....


Si purtroppo lo so...è un casino, però devo farlo solo con un'unica query.
Non c'è modo di fare questa operazione utilizzando magari delle query nidificate?

Ultima modifica effettuata da megadeth il 30/12/2010 alle 12:24
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 13:35
Giovedì, 30/12/2010
posso chiederti perché una sola query?

Se è perché dovrà essere usata da persone "Poco pratiche" allora anche uno script andrebbe benissimo, si può lanciare con un solo click.

Se è per altri motivi, allora....in teoria dovresti fare delle group by sul codice per ottenere i due costi singoli per poi sommarli. Ma per fare le group by devi separare le query. Ne escono fuori almeno 3. Per questo uno script sarebbe ad-hoc. Metti tutto li dentro e lo lanci come se fosse una singola query

PM Quote
Avatar
megadeth (Normal User)
Newbie


Messaggi: 19
Iscritto: 29/12/2010

Segnala al moderatore
Postato alle 10:34
Venerdì, 31/12/2010
Testo quotato

Postato originariamente da lorenzo:

posso chiederti perché una sola query?

Se è perché dovrà essere usata da persone "Poco pratiche" allora anche uno script andrebbe benissimo, si può lanciare con un solo click.

Se è per altri motivi, allora....in teoria dovresti fare delle group by sul codice per ottenere i due costi singoli per poi sommarli. Ma per fare le group by devi separare le query. Ne escono fuori almeno 3. Per questo uno script sarebbe ad-hoc. Metti tutto li dentro e lo lanci come se fosse una singola query



Il motivo è per scopi didattici...alla fine ho risolto con questa query:
Codice sorgente - presumibilmente VB.NET

  1. SELECT SUM(prz) AS PREZZOTOTALE
  2. FROM (SELECT SUM(prezzo*qt_usata) AS prz
  3. FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip)
  4. INNER JOIN ricambi AS c ON u.codRic=c.idRic
  5. WHERE idRip=[Inserisci l'id della riparazione]
  6.  
  7. UNION
  8.  
  9. SELECT SUM(costo_manodopera) AS prz
  10. FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip)
  11. INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro
  12. WHERE idRip=[Inserisci l'id della riparazione]
  13. );



Buon anno :k:

Ultima modifica effettuata da megadeth il 31/12/2010 alle 10:35
PM Quote