Visualizza la versione completa : Estrazione da più tabelle
E' da ore che ci sbatto la testa ma non sono riuscito a trovare una soluzione, ho una tabella chiamata apparati con i campi: id_apparato, seriale, modello e un'altra chiamata manutenzioni con i campi: id_apparato(chiave esterna), data_manutenzione, tecnico. Per ogni record della tabella apparati corrispondono + di 2 record nella tabella manutenzioni.
Il risultato che vorrei ottenere se possibile è, che alla stampa di ogni record della tabella1 mi dica anche la data dell'ultima manutenzione effettuata su quell'apparato.
Per esempio: il modello 557 ha avuto le seguenti manutenzioni, il 10/2/09, il 22/4/09 e il 3/5/09, il risultato dovrà essere: id_apparato: 1, seriale: 5570034, ultima manutenzione effettuata: 3/5/09.
Non so se sono stato chiaro.
Grazie,
ciao.
Prova qualcosa del genere:
SELECT t1.id_apparato, t1.seriale, t2.MAX(data_manutenzione) FROM apparati t1, manutenzioni t2 GROUP BY t1.id_apparato
Non ho testato, ma dovrebbe dare il risultato che vuoi tu..
Perfettamente funzionante, grazie.
Ciao.
Purtroppo ho dovuto spostare tutto su PostgreSQL e la query che mi hai dato non funziona, come mai ? mi esce fuori questo errore:
Query failed: ERROR: column "t_apparati.ckin" must appear in the GROUP BY clause or be used in an aggregate function :confuso:
Che cosa contiene quel campo? E' intera? Insomma..fammi sapere cosa dovrebbe esserci dentro..l'errore è chiaro: deve essere usata solo con funzioni di aggregazione o come condizione GROUP BY..
Il campo è un intero, se provo a toglierlo il problema passa sul secondo campo e così via.
Eccoti la query:
SELECT t_apparati.id_apparato, t_apparati.ckin, t_apparati.sn_sab, t_apparati.sn_arcdata, t_apparati.sn_ier, t_apparati.modello, MAX(t_manutenzioni.data_manutenzione) AS data
FROM t_apparati LEFT JOIN t_manutenzioni ON t_apparati.id_apparato = t_manutenzioni.id_apparato
WHERE modello = '" . $_GET['mod'] . "'
GROUP BY t_apparati.id_apparato;
Ok..allora fai così:
SELECT t_apparati.id_apparato, t_apparati.ckin, t_apparati.sn_sab, t_apparati.sn_arcdata, t_apparati.sn_ier, t_apparati.modello, MAX(t_manutenzioni.data_manutenzione) AS data
FROM t_apparati LEFT JOIN t_manutenzioni ON t_apparati.id_apparato = t_manutenzioni.id_apparato GROUP BY t_apparati.id_apparato WHERE modello = '" . $_GET['mod'] . "';
Se spostando il GROUP BY sopra invece che sotto va, abbiamo trovato il problema..altrimenti fai:
SELECT t_apparati.id_apparato, t_apparati.ckin, t_apparati.sn_sab, t_apparati.sn_arcdata, t_apparati.sn_ier, t_apparati.modello, MAX(t_manutenzioni.data_manutenzione) AS data
FROM t_apparati LEFT JOIN t_manutenzioni ON t_apparati.id_apparato = t_manutenzioni.id_apparato GROUP BY t_apparati.id_apparato, t_apparati.ckin, t_apparati.sn_sab, t_apparati.sn_arcdata, t_apparati.sn_ier, t_apparati.modello WHERE modello = '" . $_GET['mod'] . "';
vBulletin® v3.7.3, Copyright ©: 2000-2012, Jelsoft Enterprises Ltd.
Traduzione italiana Team: vBulletin-italia.it |