Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [ACCESS 2007] join tra 4 tabelle

    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:

    LINK > > I M M A G I N E

    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??

  2. #2
    Ragazzi sono riuscito a fare la join tra le tabelle. 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??

    Ecco la query:

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

  3. #3

  4. #4
    Grazie per avermi risposto.

    Avevo già provato e succede la stessa cosa.
    Non sò proprio come fare..

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    non so se ho capito bene... hai da sommare sia il costo della manodopera e sia il costo dei pezzi di ricambio?

    se e' cosi non credo che te la puoi cavare senza una UNION di 2 diverse quesry.

    prova a postare la struttura delle tabelle (struttura non immagine!) e a spiegare più dettagliatamente il risultato che vorresti avere.

  6. #6
    Originariamente inviato da 123delphi321
    ciao,

    non so se ho capito bene... hai da sommare sia il costo della manodopera e sia il costo dei pezzi di ricambio?

    se e' cosi non credo che te la puoi cavare senza una UNION di 2 diverse quesry.

    prova a postare la struttura delle tabelle (struttura non immagine!) e a spiegare più dettagliatamente il risultato che vorresti avere.
    Esattamente. Devo sommare il costo dei pezzi di ricambio usati più il costo della manodopera per ogni lavoro eseguito.
    Il costo dei pezzi di ricambio viene ottenuto dalla somma dei singoli pezzi moltiplicati per la quantità utilizzata.
    Riesco ad ottenere il costo totale dei ricambi con una query, e il costo complessivo della manodopera con un'altra query...come faccio a unire le due query??

    Le tabelle le ho create in modalità grafica da access, per questo ho postato direttamente lo schema logico-relazionale.

    Grazie per l'aiuto

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    per prima cosa ti devo dire che sarebbe ottimale creare per ogni tabella una chiave primaria unica: ID. questo e' necessario per la velocita di perfonmance del tuo db. io creo tutte le tabelle in questa maniera:

    codice:
    CREATE TABLE OPERATORI(
        ID                 INTEGER NOT NULL PRIMARY KEY,
        ITEM               VARCHAR(30),
        PASSWORDD          VARCHAR(20),
        LIVELLO            NUMERIC(1),
        SOLOLETTURA        VARCHAR(1));
    quando poi in una seconda tabella devo creare una FK che fa riferimento alla tabella OPERATORI creerò un field intero tale IDOPERATORE

    codice:
        IDOPERATORE  INTEGER NOT NULL REFERENCES OPERATORI(ID),
    per i nomi potrai usare uno standard diverso ma il concetto deve essere questo.


    ritornando al tuo problema.... posta le query che fai

  8. #8
    Si, le chiavi primarie sono presenti in ogni tabella
    Questa è la query che mi restituisce il prezzo totale dei ricambi utilizzati per un dato intervento di riparazione:

    codice:
    SELECT SUM(prezzo*qt_usata) AS PREZZORICAMBI 
    FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip) 
    INNER JOIN ricambi AS c ON u.codRic=c.idRic 
    WHERE idRip=[Inserisci l'id della riparazione];
    Mentre questa è quella che mi restituisce il prezzo totale della manodopera per ogni lavoro che è stato fatto in un dato intervento di riparazione:

    codice:
    SELECT SUM(costo_manodopera) AS PREZZOMANODOPERA 
    FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip) 
    INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro 
    WHERE idRip=[Inserisci l'id della riparazione];

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Originariamente inviato da danysp92
    Si, le chiavi primarie sono presenti in ogni tabella
    allora ok.... dall'immagine che hai linkato non riesco a capire quale sia la chiave primaria delle tabelle interventi, utilizzi e noleggi... qual'e'?



    Originariamente inviato da danysp92
    Questa è la query che mi restituisce il prezzo totale dei ricambi utilizzati per un dato intervento di riparazione:

    codice:
    SELECT SUM(prezzo*qt_usata) AS PREZZORICAMBI 
    FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip) 
    INNER JOIN ricambi AS c ON u.codRic=c.idRic 
    WHERE idRip=[Inserisci l'id della riparazione];
    Mentre questa è quella che mi restituisce il prezzo totale della manodopera per ogni lavoro che è stato fatto in un dato intervento di riparazione:

    codice:
    SELECT SUM(costo_manodopera) AS PREZZOMANODOPERA 
    FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip) 
    INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro 
    WHERE idRip=[Inserisci l'id della riparazione];
    ok. se vuoi puoi unirle con una UNION (http://www.liceofoscarini.it/didatti...sql/union.html)

    codice:
    SELECT SUM(prezzo*qt_usata) AS PREZZO
    FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip) 
    INNER JOIN ricambi AS c ON u.codRic=c.idRic 
    WHERE idRip=[Inserisci l'id della riparazione];
    
    UNION
    
    SELECT SUM(costo_manodopera) AS PREZZO
    FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip) 
    INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro 
    WHERE idRip=[Inserisci l'id della riparazione];
    con qeusto otterrai un dataresoult formato da 2 righe.

    se invece vuoi un unico righo potrai fare la select della select....
    io utilizzo firebird (quindi non lo posso testare con access):

    codice:
    SELECT SUM(prezzo) as PREZZOTOTALE from 
    (
    SELECT SUM(prezzo*qt_usata) AS PREZZO
    FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip) 
    INNER JOIN ricambi AS c ON u.codRic=c.idRic 
    WHERE idRip=[Inserisci l'id della riparazione];
    
    UNION
    
    SELECT SUM(costo_manodopera) AS PREZZO
    FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip) 
    INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro 
    WHERE idRip=[Inserisci l'id della riparazione];
    )
    ciao

  10. #10
    Le chiavi primarie nell'immagine sono quelle col simbolo della chiave dorata a sinistra del nome dell'attributo

    Finalmente funziona!!
    All'inizio Access mi dava qualche errore di sintassi, ma alla fine ho risolto con questa query:
    codice:
    SELECT SUM(prz) AS PREZZOTOTALE
    FROM (SELECT SUM(prezzo*qt_usata) AS prz
    FROM (riparazioni AS r INNER JOIN utilizzi AS u ON r.idRip=u.codRip) 
    INNER JOIN ricambi AS c ON u.codRic=c.idRic 
    WHERE idRip=[Inserisci l'id della riparazione]
    
    UNION
    
    SELECT SUM(costo_manodopera) AS prz
    FROM (riparazioni AS r INNER JOIN interventi AS i ON r.idRip=i.codRip) 
    INNER JOIN lavori AS l ON i.codLavoro=l.idLavoro 
    WHERE idRip=[Inserisci l'id della riparazione]
    );
    Ti ringrazio per l'aiuto che mi hai dato, ti auguro buone feste...ciaooo!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.