PDA

View Full Version : Openoffice Base - Aiuto per una query tra 2 tabelle


dark.shark.dsk
28-07-2009, 18:11
Ciao a tutti,
sono in grande difficoltà con la creazione di una query tra due tabelle e magari qualcuno qui mi sa aiutare... :rolleyes:

- Nella tabella1 ho un campo che si chiama "origine", che determina il materiale grezzo che è stato usato per fabbricare un prodotto.

- Nella tabella2 ho tutte le analisi dei vari materiali grezzi (ci sono anche molte ripetizioni della stessa analisi per lo stesso materiale).

Vorrei fare una query che aggiunge ad ogni record della tabella 1, un altro campo con la media delle analisi della sua relativa "origine", in modo da affiancare alla scheda di un prodotto anche le caratteristiche del materiale grezzo usato per produrlo.

Al momento ho fatto una query dalla tabella2 (chiamiamola query1) che raggruppa le origini uguali e che fa una media dei valori delle loro analisi così da avere una tabella con un record per "origine".
A questo punto vorrei creare una query che associa i dati di ogni "origine" della query1, al relativo prodotto finito della tabella 1... Ma non riesco ad eseguire la ricerca...

Mi sapreste dare una mano? :D

john_revelator
28-07-2009, 22:04
Prima di mettermi a battagliare con il pseudo-sql di Base (:mbe: ) ti dico che è contrario alle regole di normalizzazione di una base dati l'inserimento in una tabella di campi calcolati. La cosa più saggia da fare è una semplice select con un inner join tra le due tabelle solo in fase di visualizzazione dati.

dark.shark.dsk
29-07-2009, 08:38
Grazie per la risposta :)

Purtroppo di teoria dei database ne so pochissimo (normalizzazione questa sconosciuta...:confused: ) e fino ad ora mi sono praticamente solo limitato ad inserire dati in database già fatti e poco altro, ma ora mi tocca approfondire le mie conoscenze...

Potresti spiegarmi un pochino meglio cosa intendi con quello che mi hai scritto?
Non pensavo si potesse ragruppare i record di una tabella e fare una query con un altra in un unico passaggio...

Un altra cosa, mi sembra di capire non ti sta troppo simpatico Base...
Conosci qualche alternativa migliore sempre free per gestire i database?

john_revelator
29-07-2009, 10:20
Ciao. Allora, un punto di partenza da cui iniziare a capire cosa si intenda per normalizzazione di un database è wikipedia.

http://it.wikipedia.org/wiki/Normalizzazione_del_database.

Per quanto concerne il tuo problema, sebbene ovviamente non conosca completamente la tua situazione, a grandi linee strutturerei la cosa in questo modo.

Tabella materiali

id_materiale (semplice numero progressivo)
nome_materiale

Tabella_analisi
id (numero progressivo)
id_materiale (il codice che fa riferimento alla chiave primaria della tabella materiali)
valore_numerico

In questo modo, come ti accennavo ieri, potresti fare una semplice join tra le due tabelle e ricavare agevolmente il nome del materiale e la relativa media, mantenendo i dati coerenti.

La query sarebbe questa


select m.nome_materiale,avg(a.valore_numerico) as media
from materiali as m
inner join analisi as a
on m.id_materiale = a.id_materiale
group by a.id_materiale
order by a.id_materiale


testata su mysql ma sono tutte istruzioni sql standard. Per quanto riguarda Base non ci ho mai dovuto lavorare ma da quel poco che ho visto non mi piace per nulla (esempio banale trovo molto diseducativo nell'apprendimento dell'sql che metta i nomi dei campi e delle tabelle tra apici e anche la sua interpretazione dell'sql la trovo molto "personale"). De gustibus. :fagiano:


Infine, per quanto concerne le alternative free, dipende dalle tue esigenze e dalle competenze di chi dovrà mettere mani al database. Sicuramente access e base forniscono un'interfaccia grafica più user-friendly ma se potessi ti orienterei su mysql, il più utilizzato rdbms open source al mondo. Ovviamente non saresti costretto a lavorare tramite riga di comando ma potresti ricorrere ad uno dei tanti front-end messi a disposizione. Personalmente mi trovo benissimo con sqlyog

http://download.html.it/software/vedi/2355/sqlyog/

che ti permette di gestire tramite interfaccia grafica la creazione di tabelle, la loro esportazione e quant'altro. P.S. Non so se lo stesso discorso valga per Base come per Access ma con mysql scordati di poter trascinare i campi nella griglia per la generazione delle query. Dovrai scrivertele tu ma ti si aprirà tutto un altro mondo. :)

dark.shark.dsk
29-07-2009, 11:59
Capisco...
Ora sto cercando di adattare il codice che mi hai dato al mio database, e sembra che vada bene

Già questo è un buon risultato.

Per quanto riguarda l'adozione di mysql e sqlyog (ma si sa che droghe prendeva il tipo che gli ha dato sto nome?), ci farò un pensiero, anche se purtroppo non ho molto tempo per mettermi ad imparare il codice sql puro e già mi incasino ad ottenere cio che voglio dai programmi più user friendly...

Sarebbe molto interessante sapere se fosse possibile ad un certo punto "convertire" il mio db fatto in Base in mysql. Per cause di forza maggiore ho dovuto già iniziare ad inserire dati nel db fatto con Base, e se non è possibile esportare i dati che già ho, l'idea di mettermi a reinserirli tutti a mano in un altro db già mi fa scartare a priori la cosa.

john_revelator
29-07-2009, 14:00
Capisco...
Sarebbe molto interessante sapere se fosse possibile ad un certo punto "convertire" il mio db fatto in Base in mysql. Per cause di forza maggiore ho dovuto già iniziare ad inserire dati nel db fatto con Base, e se non è possibile esportare i dati che già ho, l'idea di mettermi a reinserirli tutti a mano in un altro db già mi fa scartare a priori la cosa.

Ti ripeto. Non conosco per niente Base. Ho dato una rapida occhiata nei vari menù e non ho trovato nessuna voce relativa al backup o all'esportazione. Tuttavia potresti cliccare sulla tabella che ti interessa col tasto destro, fare copia e incollare su calc. A questo punto salvi il file in formato csv e mysql è perfettamente in grado di importare i dati da tale formato.

Il primo link che ho trovato è questo
http://www.sastgroup.com/tutorials/importare-dati-da-un-file-csv-a-una-tabella-mysql

ma per maggiori dettagli ti rimando al manuale ufficiale

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

dark.shark.dsk
29-07-2009, 17:27
Anche se dici di non saperne di Base, ne sai comunque più di me di database in generale... :cool:

Già la manovara di copiare la tabella in un foglio di calcolo, salvarlo in csv ed importarlo con mysql è una bella scoperta...
Almeno so che se un giorno o l'altro avrò il tempo per imparare molto meglio l'sql, esiste un modo per tirare fuori i dati dal mio database di Base ed esportarli altrove...

Grazie per le info! :D

emmedi
29-07-2009, 18:18
Solo per dire che base è in grado di interfacciarsi a mysql; per maggiori informazioni consulta la guida presente in questa pagina:
http://www.softcombn.com/joomla/index.php?option=com_content&task=view&id=28&Itemid=46

dark.shark.dsk
29-07-2009, 21:44
Grasssie per il link :mano:
Mi sa che oltre alla perte relativa all'interfaccia con i db mysql cercherò di dare una lettura a tutta la guida.. :rolleyes: