Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MySQL] Query fra più tabelle

    Ciao a tutti, avrei bisogno di un aiuto/chiarimento su una query di MySQL.

    Sono agli inizi dello studio di Basi di dati e sto facendo qualche esercizio di SQL in locale
    Ho configurato 3 tabelle in questo modo:

    - Clienti (IDcliente, nome_cli, indirizzo, città, provincia, cap)
    => Primary Key IDcliente

    - Ordini (IDordine, IDcliente, data_spedizione, stato_sped, num_sped, corriere)
    => Primary Key IDordine - Foreign Key Idcliente

    - Dettagli_Ordine (IDordine, IDarticolo, num_pezzi, costo_pezzo)
    => Foreign Key IDordine

    La tabella Dettagli_Ordine può contenere più volte la stessa voce IDordine, perchè un ordine può essere la somma di più articoli

    >select * from Dettagli_Ordine;
    +----------+------------+--------------+--------------+
    | IDordine | IDarticolo | num_pezzi |costo_pezzo |
    +----------+------------+--------------+--------------+
    | 1 | art210 | 25 | 10.00|
    | 1 | art401 | 50 | 2.55 |
    +----------+------------+--------------+------------+

    Volevo quindi estrarre un risultato di questo tipo:
    nome_cli fa un ordine (complessivo, anche formato da gruppi di articoli diversi) che ha come importo totale ...
    esempio
    cliente1 fa ordine_numero1 (che comprende (25pezzi dell'art210 a 10 cad)+(50pezzi dell'art401 a 2.55cad)) per un totale_ordine di €...

    E' possibile ?

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

    si e' possibile! devi usare la funzione SUM

    http://www.comefaccio.net/tutorial/S...ECT-COUNT.html

    codice:
    select 
    sum(Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo)
    from Dettagli_Ordine
    where Dettagli_Ordine.ordine=:NumeroOrdine
    verifica la sintassi per passare i parametri in MySql

    ciao

  3. #3
    Originariamente inviato da 123delphi321
    ciao,

    si e' possibile! devi usare la funzione SUM

    http://www.comefaccio.net/tutorial/S...ECT-COUNT.html

    codice:
    select 
    sum(Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo)
    from Dettagli_Ordine
    where Dettagli_Ordine.ordine=:NumeroOrdine
    verifica la sintassi per passare i parametri in MySql

    ciao
    La funzione SUM la conoscevo, il problema è il resto...

    Sono riuscito a creare con questa query una tabella derivata (nome tcalc)
    codice:
    SELECT tcalc.* FROM (SELECT Ordini.IDcliente AS 'Codice Cliente', Ordini.IDordine AS 'Codice Ordine', 
     SUM(Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo) AS 'Totale Ordine' 
      FROM Ordini, Dett_Ord WHERE Ordini.IDordini=Dett_Ord.IDordini ) AS tcalc;
    +----------------+---------------+---------------+
    | Codice Cliente | Codice Ordine | Totale Ordine |
    +----------------+---------------+---------------+
    | __________1 | ________1 |_____377.50 |
    +----------------+---------------+---------------+

    (l'importo l'ho calcolato sommando i risultati della moltiplicazione di due righe (25 pezzi * 10 di costo) + (50 * 2.55))

    ma non riesco poi a ricollegare i risultati di questa tabella alla tabella Clienti, mi manca solo da far uscire una colonna con il nome davanti al Codice Cliente

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Originariamente inviato da Moz83
    La funzione SUM la conoscevo, il problema è il resto...

    Sono riuscito a creare con questa query una tabella derivata (nome tcalc)
    codice:
    SELECT tcalc.* FROM (SELECT Ordini.IDcliente AS 'Codice Cliente', Ordini.IDordine AS 'Codice Ordine', 
     SUM(Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo) AS 'Totale Ordine' 
      FROM Ordini, Dett_Ord WHERE Ordini.IDordini=Dett_Ord.IDordini ) AS tcalc;
    +----------------+---------------+---------------+
    | Codice Cliente | Codice Ordine | Totale Ordine |
    +----------------+---------------+---------------+
    | __________1 | ________1 |_____377.50 |
    +----------------+---------------+---------------+

    (l'importo l'ho calcolato sommando i risultati della moltiplicazione di due righe (25 pezzi * 10 di costo) + (50 * 2.55))

    ma non riesco poi a ricollegare i risultati di questa tabella alla tabella Clienti, mi manca solo da far uscire una colonna con il nome davanti al Codice Cliente
    Se la sintassi che hai scritto e' esatta per ottenere il codice cliente devi fare un 'Left Join' verso la tabella clienti

    codice:
    SELECT tcalc.* FROM 
    (SELECT 
     Ordini.IDcliente AS 'Codice Cliente', 
     Ordini.IDordine AS 'Codice Ordine', 
     clienti.nome_cli,
     SUM(Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo) AS 'Totale Ordine' 
     FROM Ordini, Dett_Ord WHERE Ordini.IDordini=Dett_Ord.IDordini ) AS tcalc
     left join clienti on clienti.IDcliente=Ordini.IDcliente

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.