21 messaggi dal 27 gennaio 2002
Salve a tutti, ho un problemino con delle tabelle collegate, mi sono documentato in giro, ma non ho trovato niente di specifico.

Ho due tabelle, chiamiamole "A" e "B".
Sono collegate dal campo "ID", recupero da "A" delle informazioni (ID,NOME) e da "B" solo un campo ("DATA").

Quindi mi serve:

ID, NOME, DATA (dove ID e NOME non sono mai duplicati perchè univoci nella tabella "A")

I dati della tabella "A" sono univochi, invece nella tabella "B" sono molti (rispetto ad "A").
Il problema è che se collego le tabelle con tutti i record di "A" e solo quelli di "B" in cui ID è uguale, i dati sono doppi (con LEFT JOIN). Se uso Distinct non sono doppi quelli IDENTICI, ma se "DATA" ha un valore diverso diventano lo stesso dei record diversi e quindi doppi.

Dovrei far vedere ID, NOME (una sola volta) e l'ultimo valore letto dal DB che si trova in "DATA" (nella tabella "B")

E' più difficile da spiegare...
Comunque grazie a tutti per il potenziale aiuto.
Ciao.

Roberto
1 messaggio dal 25 aprile 2003
SELECT A.Nome, B.Data FROM A INNER JOIN B ON A.ID = B.ID

Modificato da BrunoCroce il 31 marzo 2005 10.26 -
21 messaggi dal 27 gennaio 2002
Ciao Bruno,

grazie per la risposta, ma è quello che ho fatto già, il problema è che i record nella tabella A sono univoci, nella tabella B invece no.

Però succede che mi vengono visualizzati duplicati tutti i record della tabella A che hanno più di una referenza in B.

Invece a me serve che si veda il record della tabella A che abbia L'ULTIMO valore preso dalla tabella B (in questo caso del campo "DATA").

Aiuto! :-)

Ciao.
62 messaggi dal 14 febbraio 2001
www.frisullo.it
Quello che hai costruito è una relazione. I database relazionali sono stati creati per ottimizzare la memorizzazione, ossia le righe che tu hai nella tabella A le hai memorizzate solo una volta, quelle della tabella B vengono relazionate per mezzo della chiave, così da non dover ripetere quindi tutti i campi di A.
Nel recupero dei dati, in particolare quando fai una JOIN con (A.ID_A = B.FK_A) non fai altro che filtrare quello che sarebbe stato il Prodotto Cartesiano (A x B).
Non puoi evitare che vengano restituite righe con lo stesso valore (i campi di A) nel recupero dei dati.

L'unico appunto che ti faccio, è che non capisco come mai hai creato una chiave per A composta da ID e Nome. Non sarebbe bastato solo l'ID?...

Ciao
Lucio

Lucio
62 messaggi dal 14 febbraio 2001
www.frisullo.it
Ho riletto il tuo messaggio e mi sono accorto che la chiave di A è costituita dal solo ID.

non considerare quindi "l'appunto"!

Ciao
Lucio

Lucio
331 messaggi dal 06 maggio 2003
Fai due slelect differenti: ti recuperi prima nome e id dalla prima tabella e poi ti recuperi con un'altra select l'ultimo dato che ti serve dalla seconda tabella.
21 messaggi dal 27 gennaio 2002
Ragazzi grazie a tutti per le risposte, probabilmente conviene fare come dici tu, due select, solamente che devo modificare tutto il codice, mi sembra ci fosse il modo per fare una select all'interno di un'altra select.

Sapete come si fa?
Grazie a tutti!

Ciao.
3 messaggi dal 18 dicembre 2003
vedi se questo esempio ti può essere d'aiuto...



set elencalc=conn.execute("select campo1, campo2 FROM tab1 where campo1 NOT IN (select campo1 from tab2) ")
 


ovviamente da adattare alle tue esigenze....

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.