Mozaic83
23-05-2011, 21:54
Ciao a tutti,
ho iniziato da poco lo studio di SQL e mi sono bloccato sulla realizzazione di una query fatta su più tabelle
Sto esercitandomi in locale su MySQL server (5.1.54-1ubuntu4)
Ho creato un database e ho inserito 3 tabelle (Clienti - Ordini - Dettagli_Ordine).
E' un esempio che ho costruito io, prendendo spunto da un testo.
- 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 verso Clienti.IDcliente
- Dettagli_Ordine (IDordine, IDarticolo, num_pezzi, costo_pezzo)
=> Foreign Key IDordine verso Ordini.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 |
+----------+------------+--------------+------------+
Vorrei essere in grado di vedere una tabella con questi risultati:
nome_cli - IDordine - ImportoTotaleOrdine
esempio
cliente1 - 1 - 377.50 ===> ((25pezzi dell'art210 a 10 cad)+(50pezzi dell'art401 a 2.55cad))
E' possibile ?
Io avevo pensato a questa query con una tabella derivata (nome tcalc)
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;
ma appunto mi mette solo il Codice Cliente e non il suo nome e non riesco a mettere giù il collegamento tra la tabella virtuale e la tabella Clienti (tra l'altro si può fare o è proprio sbagliata in partenza la query ?)
ho iniziato da poco lo studio di SQL e mi sono bloccato sulla realizzazione di una query fatta su più tabelle
Sto esercitandomi in locale su MySQL server (5.1.54-1ubuntu4)
Ho creato un database e ho inserito 3 tabelle (Clienti - Ordini - Dettagli_Ordine).
E' un esempio che ho costruito io, prendendo spunto da un testo.
- 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 verso Clienti.IDcliente
- Dettagli_Ordine (IDordine, IDarticolo, num_pezzi, costo_pezzo)
=> Foreign Key IDordine verso Ordini.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 |
+----------+------------+--------------+------------+
Vorrei essere in grado di vedere una tabella con questi risultati:
nome_cli - IDordine - ImportoTotaleOrdine
esempio
cliente1 - 1 - 377.50 ===> ((25pezzi dell'art210 a 10 cad)+(50pezzi dell'art401 a 2.55cad))
E' possibile ?
Io avevo pensato a questa query con una tabella derivata (nome tcalc)
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;
ma appunto mi mette solo il Codice Cliente e non il suo nome e non riesco a mettere giù il collegamento tra la tabella virtuale e la tabella Clienti (tra l'altro si può fare o è proprio sbagliata in partenza la query ?)