|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2009
Città: Como
Messaggi: 70
|
[MySQL] Realizzare query su più tabelle
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 Codice:
>select * from Dettagli_Ordine; +----------+------------+--------------+--------------+ | IDordine | IDarticolo | num_pezzi | costo_pezzo | +----------+------------+--------------+--------------+ | 1 | art210 | 25 | 10.00| | 1 | art401 | 50 | 2.55 | +----------+------------+--------------+------------+ 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) 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; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Tutti i dati:
Codice:
SELECT Clienti.nome_cli, Ordini.IDordine, Dettagli_Ordine.IDarticolo, Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo AS ImportoRiga FROM Clienti INNER JOIN Ordini ON Clienti.IDcliente = Ordini.IDcliente INNER JOIN Dettagli_Ordine ON Ordini.IDordine = Dettagli_Ordine.IDordine Codice:
SELECT Clienti.nome_cli, Ordini.IDordine, SUM( Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo ) AS ImportoTotaleOrdine FROM Clienti INNER JOIN Ordini ON Clienti.IDcliente = Ordini.IDcliente INNER JOIN Dettagli_Ordine ON Ordini.IDordine = Dettagli_Ordine.IDordine GROUP BY IDordine Codice:
SELECT Clienti.nome_cli, Ordini.IDordine, SUM( Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo ) AS ImportoTotaleOrdine FROM Clienti INNER JOIN Ordini ON Clienti.IDcliente = Ordini.IDcliente LEFT OUTER JOIN Dettagli_Ordine ON Ordini.IDordine = Dettagli_Ordine.IDordine GROUP BY IDordine Codice:
SELECT Clienti.nome_cli, Ordini.IDordine, SUM( Dettagli_Ordine.num_pezzi * Dettagli_Ordine.costo_pezzo ) AS ImportoTotaleOrdine FROM Clienti LEFT OUTER JOIN Ordini ON Clienti.IDcliente = Ordini.IDcliente LEFT OUTER JOIN Dettagli_Ordine ON Ordini.IDordine = Dettagli_Ordine.IDordine GROUP BY IDordine
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2009
Città: Como
Messaggi: 70
|
Grazie mille, anche per gli altri esempi !
Rendevo io tutto difficile
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:35.



















